--- /srv/rebuilderd/tmp/rebuilderdhH8HOV/inputs/organicmaps_2026.02.18-5+ds-1_amd64.deb +++ /srv/rebuilderd/tmp/rebuilderdhH8HOV/out/organicmaps_2026.02.18-5+ds-1_amd64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-02-26 19:30:57.000000 debian-binary │ -rw-r--r-- 0 0 0 1208 2026-02-26 19:30:57.000000 control.tar.xz │ --rw-r--r-- 0 0 0 5153196 2026-02-26 19:30:57.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 5153464 2026-02-26 19:30:57.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── ./usr/bin/OMaps │ │ │┄ File has been modified after NT_GNU_BUILD_ID has been applied. │ │ │ ├── readelf --wide --notes {} │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ │ │ │ │ Displaying notes found in: .note.gnu.build-id │ │ │ │ Owner Data size Description │ │ │ │ - GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 4819fda6a5b3c6985dd2fe71571766649af504a6 │ │ │ │ + GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: b5e38e9e772e94079267eccc23427fe46d0d8793 │ │ │ │ │ │ │ │ Displaying notes found in: .note.gnu.property │ │ │ │ Owner Data size Description │ │ │ │ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 Properties: x86 ISA needed: x86-64-baseline │ │ │ │ │ │ │ │ Displaying notes found in: .note.ABI-tag │ │ │ │ Owner Data size Description │ │ │ ├── strings --all --bytes=8 {} │ │ │ │ @@ -24734,15 +24734,15 @@ │ │ │ │ CHECK(d < ofs.siCHECK(d + 1 < of 1 < ofs.size())CHECK(subReader)CHECK(version == == Version::V0)GeoJsonGeometryUUnknown [type = 0123456789abcdef( │ │ │ │ CHECK(line.size() == timestamps. │ │ │ │ CHECK(static_caste>(result) == v)CHECK((result > > 0) == (v > 0))Invalid lat,lon │ │ │ │ @a_colorTexCoordscurrent-position │ │ │ │ Legacy Objects can not be edited with the new ed/omaps/editor/fields/field_group""//\\a │ │ │ │ CHECK(numSegsForThisFid % numDirCHECK(u < numSpe numSpeedGroups) │ │ │ │ https://instagrahttps://facebookhttps://twitter.CHECK(i != m_map │ │ │ │ -CaptionRuleProtoPathTextRuleProtDrawElementProtoClassifElementPrColorElementProtColorsElementProIncorrectTransitransitionsFormatUnsupportedTimeZedTimeZoneFormatIncorrectGenerationYearOffsetForIncorrectBaseOffBaseOffsetFormatIncorrectDstDeltionsLengthFormatransitionsAmountIncorrectDayDeltIncorrectMinuteOinuteOfDayFormatgenerator/timezone/timezone_infoFailed to load timezone databasehttps://meta.omaa.omaps.app/maps{"servers":["https://cdn-nl1.organicmaps.app/","https://cdn-uk1.organicmaps.app/","https://cdn.organicmaps.app/"2026.02.26-0-0000-00000000-Linuxproducts_settingp │ │ │ │ +CaptionRuleProtoPathTextRuleProtDrawElementProtoClassifElementPrColorElementProtColorsElementProIncorrectTransitransitionsFormatUnsupportedTimeZedTimeZoneFormatIncorrectGenerationYearOffsetForIncorrectBaseOffBaseOffsetFormatIncorrectDstDeltionsLengthFormatransitionsAmountIncorrectDayDeltIncorrectMinuteOinuteOfDayFormatgenerator/timezone/timezone_infoFailed to load timezone databasehttps://meta.omaa.omaps.app/maps{"servers":["https://cdn-nl1.organicmaps.app/","https://cdn-uk1.organicmaps.app/","https://cdn.organicmaps.app/"2026.02.27-0-0000-00000000-Linuxproducts_settingp │ │ │ │ "placePagePrompt │ │ │ │ CHECK(curr.m_delelta >> 62 == 0) │ │ │ │ NULL string poin │ │ │ │ ?Zero length lineth linear objectTexture|Handles INVALID_TIME_STA │ │ │ │ CHECK(m_checker.CalledOnOriginalriginalThread()) │ │ │ │ CHECK(level < na < names.size())CHECK(id == std::this_thread::geDeadlineExceededCHECK(prefixSizeize <= s.size())CHECK(!m_map.emp │ │ │ │ tEXtSoftware │ │ │ │ @@ -26423,16 +26423,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + pos.xyw = (pos * u_projection).xyw; │ │ │ │ + pos.z = a_position.z * u_zScale; │ │ │ │ + gl_Position = u_pivotTransform * pos; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ @@ -26445,28 +26451,107 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out float v_intensity; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + in vec2 v_maskTexCoord; │ │ │ │ + in float v_halfLength; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + 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; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.8; │ │ │ │ + const float kOutlineThreshold2 = 0.5; │ │ │ │ + const float kMaskOpacity = 0.7; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + float alphaCode = color.a; │ │ │ │ + vec4 mask = texture(u_maskTex, v_maskTexCoord); │ │ │ │ + color.a = u_opacity * (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_halfLength))); │ │ │ │ + color.rgb = mix(color.rgb, mask.rgb * mix(u_lightArrowColor.rgb, u_darkArrowColor.rgb, step(alphaCode, 0.6)), mask.a * kMaskOpacity); │ │ │ │ + if (u_outline > 0.0) │ │ │ │ + color.rgb = mix(color.rgb, u_outlineColor.rgb, step(kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ + color.rgb = mix(color.rgb, u_outlineColor.rgb, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ + 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 v_colorTexCoord; │ │ │ │ + in vec2 v_maskTexCoord; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const vec4 kNormalizedLightDir = vec4(0.3162, 0.0, 0.9486, 0.0); │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + float mask = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ + color.a = color.a * mask * 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 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 │ │ │ │ @@ -26488,31 +26573,28 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - vec4 normal = vec4(a_position + a_normal, 1.0) * u_modelView; │ │ │ │ - normal.xyw = (normal * u_projection).xyw; │ │ │ │ - normal.z = normal.z * u_zScale; │ │ │ │ - pos.xyw = (pos * u_projection).xyw; │ │ │ │ - pos.z = a_position.z * u_zScale; │ │ │ │ - vec4 normDir = normal - pos; │ │ │ │ - if (dot(normDir, normDir) != 0.0) │ │ │ │ - v_intensity = max(0.0, -dot(kNormalizedLightDir, normalize(normDir))); │ │ │ │ - else │ │ │ │ - v_intensity = 0.0; │ │ │ │ - gl_Position = u_pivotTransform * pos; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + 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; │ │ │ │ @@ -26520,32 +26602,27 @@ │ │ │ │ #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 vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ + 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; │ │ │ │ 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 │ │ │ │ @@ -26567,27 +26644,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.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 │ │ │ │ + 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; │ │ │ │ @@ -26595,25 +26665,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_normal; │ │ │ │ + in vec4 v_offsets; │ │ │ │ + in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ - const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ - v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * u_color.rgb, u_color.a); │ │ │ │ + vec4 finalColor = v_color; │ │ │ │ + vec2 radius; │ │ │ │ + radius.x = max(0.0, abs(v_offsets.x) - v_offsets.z); │ │ │ │ + radius.y = max(0.0, abs(v_offsets.y) - v_offsets.w); │ │ │ │ + float maxRadius = 1.0; │ │ │ │ + float aaRadius = 0.9; │ │ │ │ + float stepValue = smoothstep(aaRadius * aaRadius, maxRadius * maxRadius, dot(radius.xy, radius.xy)); │ │ │ │ + finalColor.a = finalColor.a * (1.0 - stepValue); │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26621,21 +26694,35 @@ │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kBaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -26657,45 +26744,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 = 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 │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ - in float v_intensity; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - v_FragColor = vec4(u_color.rgb, u_color.a * smoothstep(0.7, 1.0, v_intensity)); │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26703,45 +26772,35 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in float v_intensity; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - v_FragColor = vec4(u_color.rgb, u_color.a * v_intensity); │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - in 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 │ │ │ │ @@ -26763,21 +26822,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; │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26785,28 +26846,30 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_normal; │ │ │ │ - in vec2 v_texCoords; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + in float v_intensity; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + 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 vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ - vec4 color = texture(u_colorTex, v_texCoords) * u_color; │ │ │ │ - v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * color.rgb, color.a); │ │ │ │ + vec4 finalColor = vec4(texture(u_colorTex, v_colorTexCoords).rgb, u_opacity); │ │ │ │ + v_FragColor = vec4((v_intensity * 0.2 + 0.8) * finalColor.rgb, finalColor.a); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26814,23 +26877,17 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - out vec3 v_normal; │ │ │ │ - out vec2 v_texCoords; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ 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 │ │ │ │ @@ -26852,22 +26909,16 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ - v_texCoords = mix(a_texCoords, 1.0 - a_texCoords, u_texCoordFlipping); │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + v_colorTexCoords = a_tcoord; │ │ │ │ + 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; │ │ │ │ @@ -26875,42 +26926,31 @@ │ │ │ │ #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 vec3 v_radius; │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const float aaPixelsCount = 2.5; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 finalColor = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - #endif │ │ │ │ - float smallRadius = v_radius.z - aaPixelsCount; │ │ │ │ - float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ - v_radius.x * v_radius.x + v_radius.y * v_radius.y); │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords) * texture(u_maskTex, v_maskTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -26921,21 +26961,20 @@ │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - out vec3 v_radius; │ │ │ │ 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; │ │ │ │ @@ -26968,23 +27007,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 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); │ │ │ │ + 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_colorTexCoords); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ - v_radius = a_normal; │ │ │ │ + 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; │ │ │ │ @@ -26992,34 +27035,43 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_radius; │ │ │ │ - in vec4 v_color; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + in vec4 v_offset; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - const float kAntialiasingScalar = 0.9; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_blendingWeightTex; │ │ │ │ + #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - float d = dot(v_radius.xy, v_radius.xy); │ │ │ │ - vec4 finalColor = v_color; │ │ │ │ - float aaRadius = v_radius.z * kAntialiasingScalar; │ │ │ │ - float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, d); │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + vec4 a; │ │ │ │ + a.x = texture(u_blendingWeightTex, v_offset.xy).a; // Right │ │ │ │ + a.y = texture(u_blendingWeightTex, v_offset.zw).g; // Top │ │ │ │ + a.wz = texture(u_blendingWeightTex, v_colorTexCoords).xz; // Bottom / Left │ │ │ │ + if (dot(a, vec4(1.0, 1.0, 1.0, 1.0)) < 1e-5) │ │ │ │ + v_FragColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + else │ │ │ │ + vec4 blendingOffset = vec4(0.0, a.y, 0.0, a.w); │ │ │ │ + vec2 blendingWeight = a.yw; │ │ │ │ + if (max(a.x, a.z) > max(a.y, a.w)) │ │ │ │ + { │ │ │ │ + blendingOffset = vec4(a.x, 0.0, a.z, 0.0); │ │ │ │ + blendingWeight = a.xz; │ │ │ │ + } │ │ │ │ + blendingWeight /= dot(blendingWeight, vec2(1.0, 1.0)); │ │ │ │ + vec4 bc = blendingOffset * vec4(u_framebufferMetrics.xy, -u_framebufferMetrics.xy); │ │ │ │ + bc += v_colorTexCoords.xyxy; │ │ │ │ + vec4 color = blendingWeight.x * SMAASampleLevelZero(u_colorTex, bc.xy); │ │ │ │ + color += blendingWeight.y * SMAASampleLevelZero(u_colorTex, bc.zw); │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27027,27 +27079,19 @@ │ │ │ │ #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; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + 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 │ │ │ │ @@ -27069,20 +27113,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() │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -27090,15 +27131,14 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ out vec4 v_FragColor; │ │ │ │ @@ -27106,30 +27146,22 @@ │ │ │ │ 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 aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + LOW_P vec4 finalColor = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #endif │ │ │ │ - float r1 = (v_normal.z - aaPixelsCount) * (v_normal.z - aaPixelsCount); │ │ │ │ - float r2 = v_normal.x * v_normal.x + v_normal.y * v_normal.y; │ │ │ │ - float r3 = v_normal.z * v_normal.z; │ │ │ │ - float alpha = mix(step(r3, r2), smoothstep(r1, r3, r2), v_normal.w); │ │ │ │ - LOW_P vec4 finalColor = color; │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - alpha); │ │ │ │ - if (finalColor.a == 0.0) │ │ │ │ - discard; │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -27140,32 +27172,23 @@ │ │ │ │ #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 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; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + 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 │ │ │ │ @@ -27187,23 +27210,88 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ - vec4 pos = vec4(a_normal.xy + a_colorTexCoords.zw, 0, 0) + p; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * u_lineHalfWidth; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + transformedAxisPos += a_normal.zw * u_lineHalfWidth; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_color = a_color; │ │ │ │ + v_radius = vec3(a_normal.zw, u_maxRadius) * u_lineHalfWidth; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + uniform MEDIUM_P sampler2DArray u_colorTex; │ │ │ │ + in vec3 v_texCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + v_FragColor = texture(u_colorTex, v_texCoords); │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + 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; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + color *= texture(u_maskTex, v_maskTexCoords); │ │ │ │ + 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; │ │ │ │ @@ -27284,62 +27372,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ - 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - float mask = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ - color.a = color.a * mask * u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ in vec3 a_position; │ │ │ │ in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec4 a_maskTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out float v_intensity; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform 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 │ │ │ │ @@ -27361,45 +27415,31 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - 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 │ │ │ │ + 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 │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - v_FragColor = u_color; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27407,15 +27447,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ + #define TILE_BACKGROUND_MAX_COUNT 64 │ │ │ │ + out vec3 v_texCoords; │ │ │ │ + uniform vec4 u_tileCoordsMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ 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 │ │ │ │ @@ -27437,19 +27483,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() │ │ │ │ - gl_Position = vec4(a_position, 0, 1); │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + 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); │ │ │ │ + v_texCoords = vec3(quadVertex, float(u_textureIndex[gl_InstanceID])); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27460,38 +27507,39 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ + in vec2 v_maskTexCoord; │ │ │ │ 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; │ │ │ │ uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + LOW_P vec4 glyphColor = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ #endif │ │ │ │ - color *= texture(u_maskTex, v_maskTexCoords); │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ + float dist = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ + float alpha = smoothstep(u_contrastGamma.x - u_contrastGamma.y, u_contrastGamma.x + u_contrastGamma.y, dist) * u_opacity; │ │ │ │ + glyphColor.a *= alpha; │ │ │ │ + v_FragColor = glyphColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27499,94 +27547,30 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + 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 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 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; │ │ │ │ - #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 v_texCoords; │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_texCoords); │ │ │ │ - v_FragColor = color * v_color; │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27594,20 +27578,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_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec2 v_texCoords; │ │ │ │ - out vec4 v_color; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ + 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 │ │ │ │ @@ -27629,20 +27614,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_texCoords = a_texCoords; │ │ │ │ - v_color = a_color; │ │ │ │ - gl_Position = vec4(a_position, 0, 1) * u_projection; │ │ │ │ + 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; │ │ │ │ + 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 │ │ │ │ @@ -27651,38 +27636,23 @@ │ │ │ │ #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_colorTexCoord; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + in float v_intensity; │ │ │ │ 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; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - #endif │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ + v_FragColor = vec4(u_color.rgb, u_color.a * v_intensity); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27691,20 +27661,21 @@ │ │ │ │ #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_normal; │ │ │ │ + in vec4 a_colorTexCoords; │ │ │ │ + out vec4 v_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + 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; │ │ │ │ @@ -27738,60 +27709,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 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_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); │ │ │ │ - #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 │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords) * texture(u_maskTex, v_maskTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27800,27 +27734,32 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27842,19 +27781,24 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -27862,28 +27806,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec2 v_texCoords; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform 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 │ │ │ │ @@ -27905,20 +27841,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 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; │ │ │ │ + v_texCoords = a_texCoords; │ │ │ │ + v_color = a_color; │ │ │ │ + gl_Position = vec4(a_position, 0, 1) * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27926,26 +27863,67 @@ │ │ │ │ #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; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ + #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 │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + v_FragColor = u_color; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec3 a_pos; │ │ │ │ + in vec3 a_normal; │ │ │ │ + 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 │ │ │ │ @@ -27967,26 +27945,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() │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -28059,26 +28033,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_outlineColorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_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 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 │ │ │ │ @@ -28100,70 +28085,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 │ │ │ │ + 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 │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoord = 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; │ │ │ │ - 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; │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28172,33 +28114,27 @@ │ │ │ │ #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 vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec4 a_maskTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec4 u_maskColor; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_fakeColor; │ │ │ │ - uniform vec4 u_fakeOutlineColor; │ │ │ │ - uniform vec2 u_fakeBorders; │ │ │ │ - uniform vec2 u_pattern; │ │ │ │ - uniform vec2 u_angleCosSin; │ │ │ │ - uniform float u_arrowHalfWidth; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -28220,24 +28156,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; │ │ │ │ - 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; │ │ │ │ + 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 │ │ │ │ @@ -28247,38 +28182,76 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ + in vec4 v_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ 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 aaPixelsCount = 2.5; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + float r1 = (v_normal.z - aaPixelsCount) * (v_normal.z - aaPixelsCount); │ │ │ │ + float r2 = v_normal.x * v_normal.x + v_normal.y * v_normal.y; │ │ │ │ + float r3 = v_normal.z * v_normal.z; │ │ │ │ + float alpha = mix(step(r3, r2), smoothstep(r1, r3, r2), v_normal.w); │ │ │ │ + LOW_P vec4 finalColor = color; │ │ │ │ + finalColor.a = finalColor.a * u_opacity * (1.0 - alpha); │ │ │ │ + if (finalColor.a == 0.0) │ │ │ │ + discard; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ + #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 v_colorTexCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + 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; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ finalColor.a *= u_opacity; │ │ │ │ - if (finalColor.a < 0.01) │ │ │ │ - discard; │ │ │ │ - finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -28357,49 +28330,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_length; │ │ │ │ + in vec3 v_radius; │ │ │ │ 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; │ │ │ │ - float alphaFromPattern(float curLen, float dashLen, float gapLen) │ │ │ │ - float len = dashLen + gapLen; │ │ │ │ - float offset = fract(curLen / len) * len; │ │ │ │ - return step(offset, dashLen); │ │ │ │ + const float aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - if (v_length.x < v_length.z) │ │ │ │ + vec4 finalColor = v_color; │ │ │ │ + float smallRadius = v_radius.z - aaPixelsCount; │ │ │ │ + float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ + dot(v_radius.xy, v_radius.xy)); │ │ │ │ + finalColor.a = finalColor.a * (1.0 - stepValue); │ │ │ │ + if (finalColor.a < 0.01) │ │ │ │ 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 color = mainColor + v_color; │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))) * │ │ │ │ - alphaFromPattern(v_length.x, u_pattern.x, u_pattern.y); │ │ │ │ - color = vec4(mix(color.rgb, u_maskColor.rgb, u_maskColor.a), color.a); │ │ │ │ - v_FragColor = color; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28407,42 +28359,33 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_radius; │ │ │ │ + in vec3 v_radius; │ │ │ │ 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 vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - const float kAntialiasingPixelsCount = 2.5; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const float kAntialiasingScalar = 0.9; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ + float d = dot(v_radius.xy, v_radius.xy); │ │ │ │ vec4 finalColor = v_color; │ │ │ │ - float aaRadius = max(v_radius.z - kAntialiasingPixelsCount, 0.0); │ │ │ │ - float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, │ │ │ │ - dot(v_radius.xy, v_radius.xy)); │ │ │ │ + float aaRadius = v_radius.z * kAntialiasingScalar; │ │ │ │ + float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, d); │ │ │ │ finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ - if (finalColor.a < 0.01 || u_routeParams.y > v_radius.w) │ │ │ │ - discard; │ │ │ │ - finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -28451,32 +28394,25 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ 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_trafficParams; │ │ │ │ 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 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; │ │ │ │ @@ -28499,24 +28435,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() │ │ │ │ - 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; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ 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; │ │ │ │ @@ -28524,28 +28454,101 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + 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 vec2 u_position; │ │ │ │ + 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 │ │ │ │ + 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 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; │ │ │ │ + #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 v_colorTexCoords; │ │ │ │ + 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; │ │ │ │ - uniform float u_length; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ finalColor.a *= u_opacity; │ │ │ │ + if (finalColor.a < 0.01) │ │ │ │ + discard; │ │ │ │ + finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -28554,25 +28557,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ + 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 vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ 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 │ │ │ │ @@ -28594,20 +28600,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() │ │ │ │ - gl_Position = vec4(u_position + a_position + u_length * a_normal, 0, 1) * u_projection; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec4 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; │ │ │ │ @@ -28615,41 +28621,25 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ + 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; │ │ │ │ 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 │ │ │ │ @@ -28671,16 +28661,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; │ │ │ │ - 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; │ │ │ │ @@ -28688,42 +28682,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_colorTexCoord; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in float v_lengthY; │ │ │ │ + in vec3 v_radius; │ │ │ │ out vec4 v_FragColor; │ │ │ │ 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 vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kAntialiasingThreshold = 0.92; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + float smallRadius = v_radius.z * kAntialiasingThreshold; │ │ │ │ + float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ + v_radius.x * v_radius.x + v_radius.y * v_radius.y); │ │ │ │ + color.a = u_opacity * (1.0 - stepValue); │ │ │ │ + if (color.a < 0.01) │ │ │ │ + discard; │ │ │ │ + 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 │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ - color.a *= u_opacity; │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_lengthY))); │ │ │ │ - v_FragColor = color; │ │ │ │ + in vec3 v_normal; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ + const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ + v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * u_color.rgb, u_color.a); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28731,37 +28747,26 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ + in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ - in vec3 a_length; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out float v_lengthY; │ │ │ │ + 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 vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ + 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 │ │ │ │ @@ -28783,143 +28788,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 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_lineParams.x; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - if (u_lineParams.y != 0.0) │ │ │ │ - len = vec2(a_length.x + a_length.y * u_lineParams.y, a_length.z); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - v_lengthY = len.y; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - 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 │ │ │ │ - in vec4 v_coords; │ │ │ │ - in vec4 v_offset0; │ │ │ │ - in vec4 v_offset1; │ │ │ │ - in vec4 v_offset2; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_smaaArea; │ │ │ │ - uniform sampler2D u_smaaSearch; │ │ │ │ - #define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0) │ │ │ │ - #define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0) │ │ │ │ - #define SMAA_AREATEX_MAX_DISTANCE 16.0 │ │ │ │ - #define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0)) │ │ │ │ - #define SMAALoopBegin(condition) while (condition) { │ │ │ │ - #define SMAALoopEnd } │ │ │ │ - #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ - #define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) │ │ │ │ - #define SMAARound(v) round((v)) │ │ │ │ - #define SMAAOffset(x,y) ivec2(x,y) │ │ │ │ - const vec2 kAreaTexMaxDistance = vec2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE); │ │ │ │ - const float kActivationThreshold = 0.8281; │ │ │ │ - float SMAASearchLength(vec2 e, float offset) │ │ │ │ - vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0); │ │ │ │ - vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0); │ │ │ │ - scale += vec2(-1.0, 1.0); │ │ │ │ - bias += vec2( 0.5, -0.5); │ │ │ │ - scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r; │ │ │ │ - float SMAASearchXLeft(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x > end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(-2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.0); │ │ │ │ - return u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchXRight(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x < end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.5); │ │ │ │ - return -u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchYUp(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y > end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, -2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.0); │ │ │ │ - return u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - float SMAASearchYDown(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y < end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, 2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.5); │ │ │ │ - return -u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - vec2 SMAAArea(vec2 dist, float e1, float e2) │ │ │ │ - vec2 texcoord = kAreaTexMaxDistance * SMAARound(4.0 * vec2(e1, e2)) + dist; │ │ │ │ - texcoord = SMAA_AREATEX_PIXEL_SIZE * (texcoord + 0.5); │ │ │ │ - return SMAASampleLevelZero(u_smaaArea, texcoord).rg; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - vec2 e = texture(u_colorTex, v_coords.xy).rg; │ │ │ │ - if (e.g > 0.0) // Edge at north │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x); │ │ │ │ - coords.y = v_offset1.y; │ │ │ │ - d.x = coords.x; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r; │ │ │ │ - coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 zz = u_framebufferMetrics.zz; │ │ │ │ - d = abs(SMAARound(zz * d - v_coords.zz)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r; │ │ │ │ - weights.rg = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - if (e.r > 0.0) // Edge at west │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z); │ │ │ │ - coords.x = v_offset0.x; │ │ │ │ - d.x = coords.y; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g; │ │ │ │ - coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 ww = u_framebufferMetrics.ww; │ │ │ │ - d = abs(SMAARound(ww * d - v_coords.ww)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g; │ │ │ │ - weights.ba = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - v_FragColor = weights; │ │ │ │ + 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; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28929,22 +28809,19 @@ │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 a_pos; │ │ │ │ in vec2 a_tcoord; │ │ │ │ - out vec4 v_coords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ 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 │ │ │ │ @@ -28966,18 +28843,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() │ │ │ │ - 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); │ │ │ │ + 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 │ │ │ │ @@ -29032,21 +28909,32 @@ │ │ │ │ #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 vec3 a_position; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + #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 │ │ │ │ @@ -29068,63 +28956,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_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; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + 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 │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - in vec4 v_offset; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_blendingWeightTex; │ │ │ │ - #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 a; │ │ │ │ - a.x = texture(u_blendingWeightTex, v_offset.xy).a; // Right │ │ │ │ - a.y = texture(u_blendingWeightTex, v_offset.zw).g; // Top │ │ │ │ - a.wz = texture(u_blendingWeightTex, v_colorTexCoords).xz; // Bottom / Left │ │ │ │ - if (dot(a, vec4(1.0, 1.0, 1.0, 1.0)) < 1e-5) │ │ │ │ - v_FragColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - else │ │ │ │ - vec4 blendingOffset = vec4(0.0, a.y, 0.0, a.w); │ │ │ │ - vec2 blendingWeight = a.yw; │ │ │ │ - if (max(a.x, a.z) > max(a.y, a.w)) │ │ │ │ - { │ │ │ │ - blendingOffset = vec4(a.x, 0.0, a.z, 0.0); │ │ │ │ - blendingWeight = a.xz; │ │ │ │ - } │ │ │ │ - blendingWeight /= dot(blendingWeight, vec2(1.0, 1.0)); │ │ │ │ - vec4 bc = blendingOffset * vec4(u_framebufferMetrics.xy, -u_framebufferMetrics.xy); │ │ │ │ - bc += v_colorTexCoords.xyxy; │ │ │ │ - vec4 color = blendingWeight.x * SMAASampleLevelZero(u_colorTex, bc.xy); │ │ │ │ - color += blendingWeight.y * SMAASampleLevelZero(u_colorTex, bc.zw); │ │ │ │ - v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29132,19 +28978,24 @@ │ │ │ │ #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_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset; │ │ │ │ - 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 │ │ │ │ @@ -29166,17 +29017,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_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); │ │ │ │ + gl_Position = vec4(a_position, 0, 1) * u_modelView * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29187,35 +29041,39 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ + in float v_lengthY; │ │ │ │ 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 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; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 finalColor = v_color; │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ #endif │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + color.a *= u_opacity; │ │ │ │ + color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_lengthY))); │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29223,42 +29081,20 @@ │ │ │ │ #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_colorTexCoord; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ + in vec3 v_texCoords; │ │ │ │ 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; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 glyphColor = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - #endif │ │ │ │ - float dist = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ - float alpha = smoothstep(u_contrastGamma.x - u_contrastGamma.y, u_contrastGamma.x + u_contrastGamma.y, dist) * u_opacity; │ │ │ │ - glyphColor.a *= alpha; │ │ │ │ - v_FragColor = glyphColor; │ │ │ │ + v_FragColor = texture(u_colorTex, v_texCoords.xy); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29266,35 +29102,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 │ │ │ │ @@ -29316,23 +29154,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; │ │ │ │ @@ -29340,72 +29185,64 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec4 v_texCoords; │ │ │ │ + in vec4 v_maskColor; │ │ │ │ + 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; │ │ │ │ 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 │ │ │ │ - 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 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); │ │ │ │ + vec4 color = texture(u_colorTex, v_texCoords.xy); │ │ │ │ + vec4 bgColor = texture(u_colorTex, v_texCoords.zw) * vec4(v_maskColor.xyz, 1.0); │ │ │ │ + vec4 finalColor = mix(color, mix(bgColor, color, color.a), bgColor.a); │ │ │ │ + finalColor.a = clamp(color.a + bgColor.a, 0.0, 1.0) * u_opacity * v_maskColor.w; │ │ │ │ + if (finalColor.a < 0.01) │ │ │ │ + discard; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ + #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 │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + in vec3 v_normal; │ │ │ │ + in vec2 v_texCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ + vec4 color = texture(u_colorTex, v_texCoords) * u_color; │ │ │ │ + v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * color.rgb, color.a); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29413,37 +29250,26 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform 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 │ │ │ │ @@ -29465,27 +29291,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() │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -29493,35 +29311,25 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_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; │ │ │ │ + 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 vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - const float kBaseDepthShift = -10.0; │ │ │ │ + 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 │ │ │ │ @@ -29543,27 +29351,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float depthShift = kBaseDepthShift * isOutline; │ │ │ │ - vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ - vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ - #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + 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; │ │ │ │ @@ -29571,41 +29375,22 @@ │ │ │ │ #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_colorTexCoord; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ + in vec2 v_texCoords; │ │ │ │ + in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - 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; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 glyphColor = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - #endif │ │ │ │ - float dist = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ - float alpha = smoothstep(u_contrastGamma.x - u_contrastGamma.y, u_contrastGamma.x + u_contrastGamma.y, dist) * u_opacity; │ │ │ │ - glyphColor.a *= alpha; │ │ │ │ - v_FragColor = glyphColor; │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_texCoords); │ │ │ │ + v_FragColor = color * v_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29614,35 +29399,33 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - const float 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 │ │ │ │ @@ -29664,30 +29447,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() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float depthShift = kBaseDepthShift * isOutline; │ │ │ │ - vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ - gl_Position = shiftedPos * u_projection; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + 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, colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29695,30 +29470,50 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ + 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.81; │ │ │ │ + const float kOutlineThreshold2 = 0.71; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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; │ │ │ │ @@ -29726,18 +29521,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_normalAndAnimateOrZ; │ │ │ │ + in vec4 a_texCoords; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_texCoords; │ │ │ │ + out vec4 v_maskColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -29767,18 +29564,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.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ + if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ + normal = u_interpolation * normal; │ │ │ │ + vec4 pivot = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(normal, 0.0, 0.0) * u_projection; │ │ │ │ + vec4 projectedPivot = pivot * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(projectedPivot, u_pivotTransform, 0.0, offset.xy); │ │ │ │ + float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5; │ │ │ │ + gl_Position.z = abs(a_normalAndAnimateOrZ.z) * newZ + (1.0 - abs(a_normalAndAnimateOrZ.z)) * gl_Position.z; │ │ │ │ + v_texCoords = a_texCoords; │ │ │ │ + v_maskColor = a_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29786,30 +29590,30 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - in float v_intensity; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = vec4(texture(u_colorTex, v_colorTexCoords).rgb, u_opacity); │ │ │ │ - v_FragColor = vec4((v_intensity * 0.2 + 0.8) * finalColor.rgb, finalColor.a); │ │ │ │ + vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + v_FragColor = vec4(color.rgb, u_opacity); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29817,26 +29621,26 @@ │ │ │ │ #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; │ │ │ │ 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; │ │ │ │ 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 │ │ │ │ @@ -29858,18 +29662,18 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ + vec4 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 │ │ │ │ @@ -29878,29 +29682,49 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + in vec2 a_position; │ │ │ │ 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 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + gl_Position = vec4(a_position, 0, 1); │ │ │ │ + #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; │ │ │ │ @@ -29908,24 +29732,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; │ │ │ │ + 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 vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + 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 │ │ │ │ @@ -29947,20 +29771,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(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; │ │ │ │ + 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; │ │ │ │ @@ -29968,31 +29795,49 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ + 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_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + 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_azimut; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + float alphaFromPattern(float curLen, float dashLen, float gapLen) │ │ │ │ + float len = dashLen + gapLen; │ │ │ │ + float offset = fract(curLen / len) * len; │ │ │ │ + return step(offset, dashLen); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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 color = mainColor + v_color; │ │ │ │ + color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))) * │ │ │ │ + alphaFromPattern(v_length.x, u_pattern.x, u_pattern.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; │ │ │ │ @@ -30000,20 +29845,41 @@ │ │ │ │ #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_colorTexCoord; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - in vec3 v_texCoords; │ │ │ │ + #endif │ │ │ │ + in vec2 v_maskTexCoord; │ │ │ │ out vec4 v_FragColor; │ │ │ │ + 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; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = texture(u_colorTex, v_texCoords.xy); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 glyphColor = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + #endif │ │ │ │ + float dist = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ + float alpha = smoothstep(u_contrastGamma.x - u_contrastGamma.y, u_contrastGamma.x + u_contrastGamma.y, dist) * u_opacity; │ │ │ │ + glyphColor.a *= alpha; │ │ │ │ + v_FragColor = glyphColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30021,21 +29887,34 @@ │ │ │ │ #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 int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec3 a_length; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec3 v_length; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ + uniform float u_opacity; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30057,86 +29936,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() │ │ │ │ - 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 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); │ │ │ │ - v_texCoords = vec3(quadVertex, float(u_textureIndex[gl_InstanceID])); │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - uniform MEDIUM_P sampler2DArray u_colorTex; │ │ │ │ - in vec3 v_texCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - v_FragColor = texture(u_colorTex, v_texCoords); │ │ │ │ - #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 v_colorTexCoord; │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ - in float v_halfLength; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - const float kOutlineThreshold1 = 0.8; │ │ │ │ - const float kOutlineThreshold2 = 0.5; │ │ │ │ - const float kMaskOpacity = 0.7; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - float alphaCode = color.a; │ │ │ │ - vec4 mask = texture(u_maskTex, v_maskTexCoord); │ │ │ │ - color.a = u_opacity * (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_halfLength))); │ │ │ │ - color.rgb = mix(color.rgb, mask.rgb * mix(u_lightArrowColor.rgb, u_darkArrowColor.rgb, step(alphaCode, 0.6)), mask.a * kMaskOpacity); │ │ │ │ - if (u_outline > 0.0) │ │ │ │ - color.rgb = mix(color.rgb, u_outlineColor.rgb, step(kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ - color.rgb = mix(color.rgb, u_outlineColor.rgb, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ - v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30144,30 +29963,26 @@ │ │ │ │ #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_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - out float v_halfLength; │ │ │ │ + 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_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ uniform float u_opacity; │ │ │ │ - const float kArrowVSize = 0.25; │ │ │ │ + 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 │ │ │ │ @@ -30189,30 +30004,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() │ │ │ │ - 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); │ │ │ │ + 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; │ │ │ │ @@ -30220,38 +30031,43 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ in vec3 v_radius; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const float aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - float smallRadius = v_radius.z * kAntialiasingThreshold; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 finalColor = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + float smallRadius = v_radius.z - aaPixelsCount; │ │ │ │ float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ v_radius.x * v_radius.x + v_radius.y * v_radius.y); │ │ │ │ - color.a = u_opacity * (1.0 - stepValue); │ │ │ │ - if (color.a < 0.01) │ │ │ │ - discard; │ │ │ │ - v_FragColor = color; │ │ │ │ + finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30259,28 +30075,72 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec3 v_radius; │ │ │ │ + in vec4 v_radius; │ │ │ │ + in vec4 v_color; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ 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 kAntialiasingPixelsCount = 2.5; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 finalColor = v_color; │ │ │ │ + float aaRadius = max(v_radius.z - kAntialiasingPixelsCount, 0.0); │ │ │ │ + float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, │ │ │ │ + dot(v_radius.xy, v_radius.xy)); │ │ │ │ + finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ + if (finalColor.a < 0.01 || u_routeParams.y > v_radius.w) │ │ │ │ + discard; │ │ │ │ + finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ + v_FragColor = finalColor; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_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; │ │ │ │ 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 │ │ │ │ @@ -30302,28 +30162,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - 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); │ │ │ │ + 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; │ │ │ │ @@ -30331,30 +30188,23 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ + in float v_intensity; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - v_FragColor = vec4(color.rgb, u_opacity); │ │ │ │ + v_FragColor = vec4(u_color.rgb, u_color.a * smoothstep(0.7, 1.0, v_intensity)); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30363,25 +30213,33 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + 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; │ │ │ │ + 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 │ │ │ │ @@ -30403,18 +30261,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; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ - 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; │ │ │ │ @@ -30422,19 +30285,57 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + 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 │ │ │ │ + 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() │ │ │ │ - v_FragColor = v_color; │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_intensity = a_texCoords.x; │ │ │ │ + gl_Position = position; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30444,22 +30345,28 @@ │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_color; │ │ │ │ + in 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_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 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 │ │ │ │ @@ -30484,18 +30391,25 @@ │ │ │ │ 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; │ │ │ │ + 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)); │ │ │ │ - v_color = a_color; │ │ │ │ + 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); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -30505,27 +30419,30 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_radius; │ │ │ │ - in vec4 v_color; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - const float aaPixelsCount = 2.5; │ │ │ │ + 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; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = v_color; │ │ │ │ - float smallRadius = v_radius.z - aaPixelsCount; │ │ │ │ - float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ - dot(v_radius.xy, v_radius.xy)); │ │ │ │ - finalColor.a = finalColor.a * (1.0 - stepValue); │ │ │ │ - if (finalColor.a < 0.01) │ │ │ │ - discard; │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -30534,25 +30451,149 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ + in vec4 v_coords; │ │ │ │ + in vec4 v_offset0; │ │ │ │ + in vec4 v_offset1; │ │ │ │ + in vec4 v_offset2; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_smaaArea; │ │ │ │ + uniform sampler2D u_smaaSearch; │ │ │ │ + #define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0) │ │ │ │ + #define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0) │ │ │ │ + #define SMAA_AREATEX_MAX_DISTANCE 16.0 │ │ │ │ + #define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0)) │ │ │ │ + #define SMAALoopBegin(condition) while (condition) { │ │ │ │ + #define SMAALoopEnd } │ │ │ │ + #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ + #define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) │ │ │ │ + #define SMAARound(v) round((v)) │ │ │ │ + #define SMAAOffset(x,y) ivec2(x,y) │ │ │ │ + const vec2 kAreaTexMaxDistance = vec2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE); │ │ │ │ + const float kActivationThreshold = 0.8281; │ │ │ │ + float SMAASearchLength(vec2 e, float offset) │ │ │ │ + vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0); │ │ │ │ + vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0); │ │ │ │ + scale += vec2(-1.0, 1.0); │ │ │ │ + bias += vec2( 0.5, -0.5); │ │ │ │ + scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ + bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ + return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r; │ │ │ │ + float SMAASearchXLeft(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(0.0, 1.0); │ │ │ │ + SMAALoopBegin(texcoord.x > end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(-2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.0); │ │ │ │ + return u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ + float SMAASearchXRight(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(0.0, 1.0); │ │ │ │ + SMAALoopBegin(texcoord.x < end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.5); │ │ │ │ + return -u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ + float SMAASearchYUp(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(1.0, 0.0); │ │ │ │ + SMAALoopBegin(texcoord.y > end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(0.0, -2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.0); │ │ │ │ + return u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ + float SMAASearchYDown(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(1.0, 0.0); │ │ │ │ + SMAALoopBegin(texcoord.y < end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(0.0, 2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.5); │ │ │ │ + return -u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ + vec2 SMAAArea(vec2 dist, float e1, float e2) │ │ │ │ + vec2 texcoord = kAreaTexMaxDistance * SMAARound(4.0 * vec2(e1, e2)) + dist; │ │ │ │ + texcoord = SMAA_AREATEX_PIXEL_SIZE * (texcoord + 0.5); │ │ │ │ + return SMAASampleLevelZero(u_smaaArea, texcoord).rg; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ + vec2 e = texture(u_colorTex, v_coords.xy).rg; │ │ │ │ + if (e.g > 0.0) // Edge at north │ │ │ │ + vec2 d; │ │ │ │ + vec3 coords; │ │ │ │ + coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x); │ │ │ │ + coords.y = v_offset1.y; │ │ │ │ + d.x = coords.x; │ │ │ │ + float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r; │ │ │ │ + coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y); │ │ │ │ + d.y = coords.z; │ │ │ │ + vec2 zz = u_framebufferMetrics.zz; │ │ │ │ + d = abs(SMAARound(zz * d - v_coords.zz)); │ │ │ │ + vec2 sqrt_d = sqrt(d); │ │ │ │ + float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r; │ │ │ │ + weights.rg = SMAAArea(sqrt_d, e1, e2); │ │ │ │ + if (e.r > 0.0) // Edge at west │ │ │ │ + vec2 d; │ │ │ │ + vec3 coords; │ │ │ │ + coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z); │ │ │ │ + coords.x = v_offset0.x; │ │ │ │ + d.x = coords.y; │ │ │ │ + float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g; │ │ │ │ + coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w); │ │ │ │ + d.y = coords.z; │ │ │ │ + vec2 ww = u_framebufferMetrics.ww; │ │ │ │ + d = abs(SMAARound(ww * d - v_coords.ww)); │ │ │ │ + vec2 sqrt_d = sqrt(d); │ │ │ │ + float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g; │ │ │ │ + weights.ba = SMAAArea(sqrt_d, e1, e2); │ │ │ │ + v_FragColor = weights; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + 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 │ │ │ │ @@ -30574,54 +30615,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() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_lineHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - transformedAxisPos += a_normal.zw * u_lineHalfWidth; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - v_color = a_color; │ │ │ │ - v_radius = vec3(a_normal.zw, u_maxRadius) * u_lineHalfWidth; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = shiftedPos * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ - in vec4 v_offsets; │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = v_color; │ │ │ │ - vec2 radius; │ │ │ │ - radius.x = max(0.0, abs(v_offsets.x) - v_offsets.z); │ │ │ │ - radius.y = max(0.0, abs(v_offsets.y) - v_offsets.w); │ │ │ │ - float maxRadius = 1.0; │ │ │ │ - float aaRadius = 0.9; │ │ │ │ - float stepValue = smoothstep(aaRadius * aaRadius, maxRadius * maxRadius, dot(radius.xy, radius.xy)); │ │ │ │ - finalColor.a = finalColor.a * (1.0 - stepValue); │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30629,25 +30646,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 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; │ │ │ │ + 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 │ │ │ │ @@ -30669,23 +30685,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.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; │ │ │ │ + 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; │ │ │ │ @@ -30693,35 +30705,38 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_texCoords; │ │ │ │ - in vec4 v_maskColor; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_texCoords.xy); │ │ │ │ - vec4 bgColor = texture(u_colorTex, v_texCoords.zw) * vec4(v_maskColor.xyz, 1.0); │ │ │ │ - vec4 finalColor = mix(color, mix(bgColor, color, color.a), bgColor.a); │ │ │ │ - finalColor.a = clamp(color.a + bgColor.a, 0.0, 1.0) * u_opacity * v_maskColor.w; │ │ │ │ - if (finalColor.a < 0.01) │ │ │ │ - discard; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + #endif │ │ │ │ + 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; │ │ │ │ @@ -30729,28 +30744,53 @@ │ │ │ │ #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 vec4 v_color; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + v_FragColor = v_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_colorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30772,25 +30812,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() │ │ │ │ - vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ - if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ - normal = u_interpolation * normal; │ │ │ │ - vec4 p = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - vec4 pos = vec4(normal, 0.0, 0.0) + p; │ │ │ │ - vec4 projectedPivot = p * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5; │ │ │ │ - gl_Position.z = abs(a_normalAndAnimateOrZ.z) * newZ + (1.0 - abs(a_normalAndAnimateOrZ.z)) * gl_Position.z; │ │ │ │ - v_texCoords = a_texCoords; │ │ │ │ - v_maskColor = a_color; │ │ │ │ + vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30798,68 +30837,29 @@ │ │ │ │ #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 v_colorTexCoords; │ │ │ │ + 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 vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ + 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 │ │ │ │ - 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_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; │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ N2dp10GpuProgramE │ │ │ │ N3gpu19ProgramParamsSetterE │ │ │ │ N3gpu21GLProgramParamsSetterE │ │ │ │ N3gpu11ProgramPoolE │ │ │ │ N3gpu13GLProgramPoolE │ │ │ │ N2dp6vulkan16VulkanGpuProgramE │ │ │ │ N3gpu6vulkan25VulkanProgramParamsSetterE │ │ │ ├── objdump --line-numbers --disassemble --demangle --reloc --no-show-raw-insn --section=.text {} │ │ │ │ @@ -2281765,917 +2281765,917 @@ │ │ │ │ lea 0x24dd70(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1e0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x55e254(%rip),%r13 # faaca0 ::id@GLIBCXX_3.4+0x97a0> │ │ │ │ mov 0x1f8(%rsp),%rdx │ │ │ │ mov 0x1e0(%rsp),%rsi │ │ │ │ - lea 0x30bd1d(%rip),%r8 │ │ │ │ - lea 0x30c2b6(%rip),%rcx │ │ │ │ + lea 0x315cbd(%rip),%r8 │ │ │ │ + lea 0x310f76(%rip),%rcx │ │ │ │ mov %r13,%rdi │ │ │ │ call a57b80 │ │ │ │ lea 0x400(%rsp),%rax │ │ │ │ lea 0x24dd3e(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x228(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x3e0(%rsp),%rax │ │ │ │ lea 0x24dd34(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x210(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x228(%rsp),%rdx │ │ │ │ mov 0x210(%rsp),%rsi │ │ │ │ - lea 0x323479(%rip),%r8 │ │ │ │ - lea 0x3237d2(%rip),%rcx │ │ │ │ + lea 0x310079(%rip),%r8 │ │ │ │ + lea 0x31ab12(%rip),%rcx │ │ │ │ lea 0x55e21b(%rip),%rdi # faacf0 ::id@GLIBCXX_3.4+0x97f0> │ │ │ │ call a57b80 │ │ │ │ lea 0x440(%rsp),%rax │ │ │ │ lea 0x24dccf(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x258(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x420(%rsp),%rax │ │ │ │ lea 0x24dcc5(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x240(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x258(%rsp),%rdx │ │ │ │ mov 0x240(%rsp),%rsi │ │ │ │ - lea 0x3118b1(%rip),%r8 │ │ │ │ - lea 0x311c6a(%rip),%rcx │ │ │ │ + lea 0x30a871(%rip),%r8 │ │ │ │ + lea 0x31814a(%rip),%rcx │ │ │ │ lea 0x55e203(%rip),%rdi # faad40 ::id@GLIBCXX_3.4+0x9840> │ │ │ │ call a57b80 │ │ │ │ lea 0x480(%rsp),%rax │ │ │ │ lea 0x24dc91(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x288(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x460(%rsp),%rax │ │ │ │ lea 0x24dc80(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x270(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x288(%rsp),%rdx │ │ │ │ mov 0x270(%rsp),%rsi │ │ │ │ - lea 0x32c489(%rip),%r8 │ │ │ │ - lea 0x32c902(%rip),%rcx │ │ │ │ + lea 0x31e9c9(%rip),%r8 │ │ │ │ + lea 0x327082(%rip),%rcx │ │ │ │ lea 0x55e1eb(%rip),%rdi # faad90 ::id@GLIBCXX_3.4+0x9890> │ │ │ │ call a57b80 │ │ │ │ lea 0x4c0(%rsp),%rax │ │ │ │ lea 0x24dc29(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2b8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x4a0(%rsp),%rax │ │ │ │ lea 0x24dc18(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2a0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x2b8(%rsp),%rdx │ │ │ │ mov 0x2a0(%rsp),%rsi │ │ │ │ - lea 0x32c421(%rip),%r8 │ │ │ │ - lea 0x32c89a(%rip),%rcx │ │ │ │ + lea 0x31e961(%rip),%r8 │ │ │ │ + lea 0x32701a(%rip),%rcx │ │ │ │ lea 0x55e1d3(%rip),%rdi # faade0 ::id@GLIBCXX_3.4+0x98e0> │ │ │ │ call a57b80 │ │ │ │ lea 0x500(%rsp),%rax │ │ │ │ lea 0x24dbdd(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2e8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x4e0(%rsp),%rax │ │ │ │ lea 0x24dbc7(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2d0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x2e8(%rsp),%rdx │ │ │ │ mov 0x2d0(%rsp),%rsi │ │ │ │ - lea 0x31f059(%rip),%r8 │ │ │ │ - lea 0x320a72(%rip),%rcx │ │ │ │ + lea 0x30f9f9(%rip),%r8 │ │ │ │ + lea 0x314352(%rip),%rcx │ │ │ │ lea 0x55e1bb(%rip),%rdi # faae30 ::id@GLIBCXX_3.4+0x9930> │ │ │ │ call a57b80 │ │ │ │ lea 0x540(%rsp),%rax │ │ │ │ lea 0x24db75(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x318(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x520(%rsp),%rax │ │ │ │ lea 0x24db71(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x300(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x318(%rsp),%rdx │ │ │ │ mov 0x300(%rsp),%rsi │ │ │ │ - lea 0x31eff1(%rip),%r8 │ │ │ │ - lea 0x31f4ca(%rip),%rcx │ │ │ │ + lea 0x30f991(%rip),%r8 │ │ │ │ + lea 0x30912a(%rip),%rcx │ │ │ │ lea 0x55e1a3(%rip),%rdi # faae80 ::id@GLIBCXX_3.4+0x9980> │ │ │ │ call a57b80 │ │ │ │ lea 0x580(%rsp),%rax │ │ │ │ lea 0x24db31(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x348(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x560(%rsp),%rax │ │ │ │ lea 0x24db28(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x330(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x348(%rsp),%rdx │ │ │ │ mov 0x330(%rsp),%rsi │ │ │ │ - lea 0x322169(%rip),%r8 │ │ │ │ - lea 0x322622(%rip),%rcx │ │ │ │ + lea 0x3248a9(%rip),%r8 │ │ │ │ + lea 0x32b382(%rip),%rcx │ │ │ │ lea 0x55e18b(%rip),%rdi # faaed0 ::id@GLIBCXX_3.4+0x99d0> │ │ │ │ call a57b80 │ │ │ │ lea 0x5c0(%rsp),%rax │ │ │ │ lea 0x24dac9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x378(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x5a0(%rsp),%rax │ │ │ │ lea 0x24dac0(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x360(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x378(%rsp),%rdx │ │ │ │ mov 0x360(%rsp),%rsi │ │ │ │ - lea 0x322101(%rip),%r8 │ │ │ │ - lea 0x3225ba(%rip),%rcx │ │ │ │ + lea 0x324841(%rip),%r8 │ │ │ │ + lea 0x32b31a(%rip),%rcx │ │ │ │ lea 0x55e173(%rip),%rdi # faaf20 ::id@GLIBCXX_3.4+0x9a20> │ │ │ │ call a57b80 │ │ │ │ lea 0x600(%rsp),%rax │ │ │ │ lea 0x24da8d(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x30(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x5e0(%rsp),%rax │ │ │ │ lea 0x24db20(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x18(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x30(%rsp),%rdx │ │ │ │ mov 0x18(%rsp),%rsi │ │ │ │ - lea 0x31eac5(%rip),%r8 │ │ │ │ - lea 0x30563e(%rip),%rcx │ │ │ │ + lea 0x30c345(%rip),%r8 │ │ │ │ + lea 0x31c15e(%rip),%rcx │ │ │ │ lea 0x55e167(%rip),%rdi # faaf70 ::id@GLIBCXX_3.4+0x9a70> │ │ │ │ call a57b80 │ │ │ │ lea 0x640(%rsp),%rax │ │ │ │ lea 0x24da31(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x60(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x620(%rsp),%rax │ │ │ │ lea 0x24dac4(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x48(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x60(%rsp),%rdx │ │ │ │ mov 0x48(%rsp),%rsi │ │ │ │ - lea 0x31ea69(%rip),%r8 │ │ │ │ - lea 0x3055e2(%rip),%rcx │ │ │ │ + lea 0x30c2e9(%rip),%r8 │ │ │ │ + lea 0x31c102(%rip),%rcx │ │ │ │ lea 0x55e15b(%rip),%rdi # faafc0 ::id@GLIBCXX_3.4+0x9ac0> │ │ │ │ call a57b80 │ │ │ │ lea 0x680(%rsp),%rax │ │ │ │ lea 0x24d9e5(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x90(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x660(%rsp),%rax │ │ │ │ lea 0x24d9d6(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x78(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x90(%rsp),%rdx │ │ │ │ mov 0x78(%rsp),%rsi │ │ │ │ - lea 0x323d27(%rip),%r8 │ │ │ │ - lea 0x305f60(%rip),%rcx │ │ │ │ + lea 0x3099c7(%rip),%r8 │ │ │ │ + lea 0x30e280(%rip),%rcx │ │ │ │ lea 0x55e149(%rip),%rdi # fab010 ::id@GLIBCXX_3.4+0x9b10> │ │ │ │ call a57b80 │ │ │ │ lea 0x6c0(%rsp),%rax │ │ │ │ lea 0x24d973(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xc0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x6a0(%rsp),%rax │ │ │ │ lea 0x24d97f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xa8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0xc0(%rsp),%rdx │ │ │ │ mov 0xa8(%rsp),%rsi │ │ │ │ - lea 0x31e99f(%rip),%r8 │ │ │ │ - lea 0x306a58(%rip),%rcx │ │ │ │ + lea 0x30c21f(%rip),%r8 │ │ │ │ + lea 0x305518(%rip),%rcx │ │ │ │ lea 0x55e131(%rip),%rdi # fab060 ::id@GLIBCXX_3.4+0x9b60> │ │ │ │ call a57b80 │ │ │ │ lea 0x700(%rsp),%rax │ │ │ │ lea 0x24dbd6(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xf0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x6e0(%rsp),%rax │ │ │ │ lea 0x24d921(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xd8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0xf0(%rsp),%rdx │ │ │ │ mov 0xd8(%rsp),%rsi │ │ │ │ - lea 0x310517(%rip),%r8 │ │ │ │ - lea 0x3108f0(%rip),%rcx │ │ │ │ + lea 0x32c737(%rip),%r8 │ │ │ │ + lea 0x30a7d0(%rip),%rcx │ │ │ │ lea 0x55e119(%rip),%rdi # fab0b0 ::id@GLIBCXX_3.4+0x9bb0> │ │ │ │ call a57b80 │ │ │ │ lea 0x740(%rsp),%rax │ │ │ │ lea 0x24d8e1(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x118(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x720(%rsp),%rax │ │ │ │ lea 0x24d8d5(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x108(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x118(%rsp),%rdx │ │ │ │ mov 0x108(%rsp),%rsi │ │ │ │ - lea 0x32a44f(%rip),%r8 │ │ │ │ - lea 0x32a7c8(%rip),%rcx │ │ │ │ + lea 0x316b4f(%rip),%r8 │ │ │ │ + lea 0x30c548(%rip),%rcx │ │ │ │ lea 0x55e101(%rip),%rdi # fab100 ::id@GLIBCXX_3.4+0x9c00> │ │ │ │ call a57b80 │ │ │ │ lea 0x780(%rsp),%rax │ │ │ │ lea 0x24d89f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x140(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x760(%rsp),%rax │ │ │ │ lea 0x24d890(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x130(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x140(%rsp),%rdx │ │ │ │ mov 0x130(%rsp),%rsi │ │ │ │ - lea 0x30d1c7(%rip),%r8 │ │ │ │ - lea 0x30d5a0(%rip),%rcx │ │ │ │ + lea 0x306507(%rip),%r8 │ │ │ │ + lea 0x314b40(%rip),%rcx │ │ │ │ lea 0x55e0e9(%rip),%rdi # fab150 ::id@GLIBCXX_3.4+0x9c50> │ │ │ │ call a57b80 │ │ │ │ lea 0x7c0(%rsp),%rax │ │ │ │ lea 0x24d744(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x160(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x7a0(%rsp),%rax │ │ │ │ lea 0x24d838(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x150(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x160(%rsp),%rdx │ │ │ │ mov 0x150(%rsp),%rsi │ │ │ │ - lea 0x322e7f(%rip),%r8 │ │ │ │ - lea 0x3134f8(%rip),%rcx │ │ │ │ + lea 0x30fa7f(%rip),%r8 │ │ │ │ + lea 0x3134d8(%rip),%rcx │ │ │ │ lea 0x55e0d1(%rip),%rdi # fab1a0 ::id@GLIBCXX_3.4+0x9ca0> │ │ │ │ call a57b80 │ │ │ │ lea 0x800(%rsp),%rax │ │ │ │ lea 0x24d76b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x180(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x7e0(%rsp),%rax │ │ │ │ lea 0x24d7fb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x170(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x180(%rsp),%rdx │ │ │ │ mov 0x170(%rsp),%rsi │ │ │ │ - lea 0x31e797(%rip),%r8 │ │ │ │ - lea 0x305310(%rip),%rcx │ │ │ │ + lea 0x30c017(%rip),%r8 │ │ │ │ + lea 0x31be30(%rip),%rcx │ │ │ │ lea 0x55e0b9(%rip),%rdi # fab1f0 ::id@GLIBCXX_3.4+0x9cf0> │ │ │ │ call a57b80 │ │ │ │ lea 0x840(%rsp),%rax │ │ │ │ lea 0x24da95(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1a0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x820(%rsp),%rax │ │ │ │ lea 0x24da89(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x190(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x1a0(%rsp),%rdx │ │ │ │ mov 0x190(%rsp),%rsi │ │ │ │ - lea 0x3098af(%rip),%r8 │ │ │ │ - lea 0x309de8(%rip),%rcx │ │ │ │ + lea 0x325f8f(%rip),%r8 │ │ │ │ + lea 0x327808(%rip),%rcx │ │ │ │ lea 0x55e0a1(%rip),%rdi # fab240 ::id@GLIBCXX_3.4+0x9d40> │ │ │ │ call a57b80 │ │ │ │ lea 0x880(%rsp),%rax │ │ │ │ lea 0x24d72f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1c0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x860(%rsp),%rax │ │ │ │ lea 0x24d722(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1b0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x1c0(%rsp),%rdx │ │ │ │ mov 0x1b0(%rsp),%rsi │ │ │ │ - lea 0x30e927(%rip),%r8 │ │ │ │ - lea 0x30ed80(%rip),%rcx │ │ │ │ + lea 0x30d047(%rip),%r8 │ │ │ │ + lea 0x320180(%rip),%rcx │ │ │ │ lea 0x55e089(%rip),%rdi # fab290 ::id@GLIBCXX_3.4+0x9d90> │ │ │ │ call a57b80 │ │ │ │ lea 0x8c0(%rsp),%rax │ │ │ │ lea 0x24d6eb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1e8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x8a0(%rsp),%rax │ │ │ │ lea 0x24d6de(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1d0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x1e8(%rsp),%rdx │ │ │ │ mov 0x1d0(%rsp),%rsi │ │ │ │ - lea 0x3246bf(%rip),%r8 │ │ │ │ - lea 0x3249f8(%rip),%rcx │ │ │ │ + lea 0x32d4df(%rip),%r8 │ │ │ │ + lea 0x31c6d8(%rip),%rcx │ │ │ │ lea 0x55e071(%rip),%rdi # fab2e0 ::id@GLIBCXX_3.4+0x9de0> │ │ │ │ call a57b80 │ │ │ │ lea 0x900(%rsp),%rax │ │ │ │ lea 0x24d6a7(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x218(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x8e0(%rsp),%rax │ │ │ │ lea 0x24d692(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x200(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x218(%rsp),%rdx │ │ │ │ mov 0x200(%rsp),%rsi │ │ │ │ - lea 0x318197(%rip),%r8 │ │ │ │ - lea 0x3184d0(%rip),%rcx │ │ │ │ + lea 0x3159f7(%rip),%r8 │ │ │ │ + lea 0x3191f0(%rip),%rcx │ │ │ │ lea 0x55e059(%rip),%rdi # fab330 ::id@GLIBCXX_3.4+0x9e30> │ │ │ │ call a57b80 │ │ │ │ lea 0x940(%rsp),%rax │ │ │ │ lea 0x24d653(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x248(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x920(%rsp),%rax │ │ │ │ lea 0x24d64b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x230(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x248(%rsp),%rdx │ │ │ │ mov 0x230(%rsp),%rsi │ │ │ │ - lea 0x32522f(%rip),%r8 │ │ │ │ - lea 0x313ca8(%rip),%rcx │ │ │ │ + lea 0x32960f(%rip),%r8 │ │ │ │ + lea 0x322088(%rip),%rcx │ │ │ │ lea 0x55e041(%rip),%rdi # fab380 ::id@GLIBCXX_3.4+0x9e80> │ │ │ │ call a57b80 │ │ │ │ lea 0x980(%rsp),%rax │ │ │ │ lea 0x24d5eb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x278(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x960(%rsp),%rax │ │ │ │ lea 0x24d5fb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x260(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x278(%rsp),%rdx │ │ │ │ mov 0x260(%rsp),%rsi │ │ │ │ - lea 0x3251c7(%rip),%r8 │ │ │ │ - lea 0x3127a0(%rip),%rcx │ │ │ │ + lea 0x3295a7(%rip),%r8 │ │ │ │ + lea 0x325300(%rip),%rcx │ │ │ │ lea 0x55e029(%rip),%rdi # fab3d0 ::id@GLIBCXX_3.4+0x9ed0> │ │ │ │ call a57b80 │ │ │ │ lea 0x9c0(%rsp),%rax │ │ │ │ lea 0x24d5c2(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2a8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x9a0(%rsp),%rax │ │ │ │ lea 0x24d5b6(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x290(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x2a8(%rsp),%rdx │ │ │ │ mov 0x290(%rsp),%rsi │ │ │ │ - lea 0x3196df(%rip),%r8 │ │ │ │ - lea 0x319b58(%rip),%rcx │ │ │ │ + lea 0x31ce3f(%rip),%r8 │ │ │ │ + lea 0x31d4d8(%rip),%rcx │ │ │ │ lea 0x55e011(%rip),%rdi # fab420 ::id@GLIBCXX_3.4+0x9f20> │ │ │ │ call a57b80 │ │ │ │ lea 0xa00(%rsp),%rax │ │ │ │ lea 0x24d580(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2d8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x9e0(%rsp),%rax │ │ │ │ lea 0x24d56d(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2c0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x2d8(%rsp),%rdx │ │ │ │ mov 0x2c0(%rsp),%rsi │ │ │ │ - lea 0x3293b7(%rip),%r8 │ │ │ │ - lea 0x329590(%rip),%rcx │ │ │ │ + lea 0x32c637(%rip),%r8 │ │ │ │ + lea 0x323090(%rip),%rcx │ │ │ │ lea 0x55dff9(%rip),%rdi # fab470 ::id@GLIBCXX_3.4+0x9f70> │ │ │ │ call a57b80 │ │ │ │ lea 0xa40(%rsp),%rax │ │ │ │ lea 0x24d530(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x308(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xa20(%rsp),%rax │ │ │ │ lea 0x24d524(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2f0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x308(%rsp),%rdx │ │ │ │ mov 0x2f0(%rsp),%rsi │ │ │ │ - lea 0x32adaf(%rip),%r8 │ │ │ │ - lea 0x32b128(%rip),%rcx │ │ │ │ + lea 0x3079cf(%rip),%r8 │ │ │ │ + lea 0x31f228(%rip),%rcx │ │ │ │ lea 0x55dfe1(%rip),%rdi # fab4c0 ::id@GLIBCXX_3.4+0x9fc0> │ │ │ │ call a57b80 │ │ │ │ lea 0xa80(%rsp),%rax │ │ │ │ lea 0x24d4ee(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x338(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xa60(%rsp),%rax │ │ │ │ lea 0x24d4d9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x320(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x338(%rsp),%rdx │ │ │ │ mov 0x320(%rsp),%rsi │ │ │ │ - lea 0x314427(%rip),%r8 │ │ │ │ - lea 0x314ba0(%rip),%rcx │ │ │ │ + lea 0x320887(%rip),%r8 │ │ │ │ + lea 0x324560(%rip),%rcx │ │ │ │ lea 0x55dfc9(%rip),%rdi # fab510 ::id@GLIBCXX_3.4+0xa010> │ │ │ │ call a57b80 │ │ │ │ lea 0xac0(%rsp),%rax │ │ │ │ lea 0x24d49a(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x368(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xaa0(%rsp),%rax │ │ │ │ lea 0x24d471(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x350(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x368(%rsp),%rdx │ │ │ │ mov 0x350(%rsp),%rsi │ │ │ │ - lea 0x31671f(%rip),%r8 │ │ │ │ - lea 0x314b38(%rip),%rcx │ │ │ │ + lea 0x32399f(%rip),%r8 │ │ │ │ + lea 0x3244f8(%rip),%rcx │ │ │ │ lea 0x55dfb1(%rip),%rdi # fab560 ::id@GLIBCXX_3.4+0xa060> │ │ │ │ call a57b80 │ │ │ │ lea 0xb00(%rsp),%rax │ │ │ │ lea 0x24d441(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x20(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xae0(%rsp),%rax │ │ │ │ lea 0x24d435(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x20(%rsp),%rdx │ │ │ │ mov 0x8(%rsp),%rsi │ │ │ │ - lea 0x3156e3(%rip),%r8 │ │ │ │ - lea 0x315b7c(%rip),%rcx │ │ │ │ + lea 0x318023(%rip),%r8 │ │ │ │ + lea 0x3159fc(%rip),%rcx │ │ │ │ lea 0x55dfa5(%rip),%rdi # fab5b0 ::id@GLIBCXX_3.4+0xa0b0> │ │ │ │ call a57b80 │ │ │ │ lea 0xb40(%rsp),%rax │ │ │ │ lea 0x24d405(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x50(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xb20(%rsp),%rax │ │ │ │ lea 0x24d3fa(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x38(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x50(%rsp),%rdx │ │ │ │ mov 0x38(%rsp),%rsi │ │ │ │ - lea 0x316d07(%rip),%r8 │ │ │ │ - lea 0x3172c0(%rip),%rcx │ │ │ │ + lea 0x326007(%rip),%r8 │ │ │ │ + lea 0x310de0(%rip),%rcx │ │ │ │ lea 0x55df99(%rip),%rdi # fab600 ::id@GLIBCXX_3.4+0xa100> │ │ │ │ call a57b80 │ │ │ │ lea 0xb80(%rsp),%rax │ │ │ │ lea 0x24d3cb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x80(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xb60(%rsp),%rax │ │ │ │ lea 0x24d3bd(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x68(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x80(%rsp),%rdx │ │ │ │ mov 0x68(%rsp),%rsi │ │ │ │ - lea 0x30a305(%rip),%r8 │ │ │ │ - lea 0x30a73e(%rip),%rcx │ │ │ │ + lea 0x316805(%rip),%r8 │ │ │ │ + lea 0x306e5e(%rip),%rcx │ │ │ │ lea 0x55df87(%rip),%rdi # fab650 ::id@GLIBCXX_3.4+0xa150> │ │ │ │ call a57b80 │ │ │ │ lea 0xbc0(%rsp),%rax │ │ │ │ lea 0x24d105(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xb0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xba0(%rsp),%rax │ │ │ │ lea 0x24d0f4(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x98(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0xb0(%rsp),%rdx │ │ │ │ mov 0x98(%rsp),%rsi │ │ │ │ - lea 0x32b8fd(%rip),%r8 │ │ │ │ - lea 0x32bd76(%rip),%rcx │ │ │ │ + lea 0x31de3d(%rip),%r8 │ │ │ │ + lea 0x3264f6(%rip),%rcx │ │ │ │ lea 0x55df6f(%rip),%rdi # fab6a0 ::id@GLIBCXX_3.4+0xa1a0> │ │ │ │ call a57b80 │ │ │ │ lea 0xc00(%rsp),%rax │ │ │ │ lea 0x24d09d(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xe0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xbe0(%rsp),%rax │ │ │ │ lea 0x24d08c(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xc8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0xe0(%rsp),%rdx │ │ │ │ mov 0xc8(%rsp),%rsi │ │ │ │ - lea 0x32b895(%rip),%r8 │ │ │ │ - lea 0x32bd0e(%rip),%rcx │ │ │ │ + lea 0x31ddd5(%rip),%r8 │ │ │ │ + lea 0x32648e(%rip),%rcx │ │ │ │ lea 0x55df57(%rip),%rdi # fab6f0 ::id@GLIBCXX_3.4+0xa1f0> │ │ │ │ call a57b80 │ │ │ │ lea 0xc40(%rsp),%rax │ │ │ │ lea 0x24d2bb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x110(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xc20(%rsp),%rax │ │ │ │ lea 0x24d2ab(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xf8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x110(%rsp),%rdx │ │ │ │ mov 0xf8(%rsp),%rsi │ │ │ │ - lea 0x30d98d(%rip),%r8 │ │ │ │ - lea 0x30db66(%rip),%rcx │ │ │ │ + lea 0x31228d(%rip),%r8 │ │ │ │ + lea 0x322546(%rip),%rcx │ │ │ │ lea 0x55df3f(%rip),%rdi # fab740 ::id@GLIBCXX_3.4+0xa240> │ │ │ │ call a57b80 │ │ │ │ lea 0xc80(%rsp),%rax │ │ │ │ lea 0x24d271(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x138(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xc60(%rsp),%rax │ │ │ │ lea 0x24d262(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x120(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x138(%rsp),%rdx │ │ │ │ mov 0x120(%rsp),%rsi │ │ │ │ - lea 0x318885(%rip),%r8 │ │ │ │ - lea 0x318afe(%rip),%rcx │ │ │ │ + lea 0x311fa5(%rip),%r8 │ │ │ │ + lea 0x3093be(%rip),%rcx │ │ │ │ lea 0x55df27(%rip),%rdi # fab790 ::id@GLIBCXX_3.4+0xa290> │ │ │ │ call a57b80 │ │ │ │ lea 0xcc0(%rsp),%rax │ │ │ │ lea 0x24d229(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x158(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xca0(%rsp),%rax │ │ │ │ lea 0x24d216(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x148(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x158(%rsp),%rdx │ │ │ │ mov 0x148(%rsp),%rsi │ │ │ │ - lea 0x306b3d(%rip),%r8 │ │ │ │ - lea 0x306e36(%rip),%rcx │ │ │ │ + lea 0x319a1d(%rip),%r8 │ │ │ │ + lea 0x30f5d6(%rip),%rcx │ │ │ │ lea 0x55df0f(%rip),%rdi # fab7e0 ::id@GLIBCXX_3.4+0xa2e0> │ │ │ │ call a57b80 │ │ │ │ lea 0xd00(%rsp),%rax │ │ │ │ lea 0x24d1d9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x178(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xce0(%rsp),%rax │ │ │ │ lea 0x24d1cf(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x168(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x178(%rsp),%rdx │ │ │ │ mov 0x168(%rsp),%rsi │ │ │ │ - lea 0x308455(%rip),%r8 │ │ │ │ - lea 0x3087ce(%rip),%rcx │ │ │ │ + lea 0x31e0b5(%rip),%r8 │ │ │ │ + lea 0x31232e(%rip),%rcx │ │ │ │ lea 0x55def7(%rip),%rdi # fab830 ::id@GLIBCXX_3.4+0xa330> │ │ │ │ call a57b80 │ │ │ │ lea 0xd40(%rsp),%rax │ │ │ │ lea 0x24d19b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x198(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xd20(%rsp),%rax │ │ │ │ lea 0x24d18f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x188(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x198(%rsp),%rdx │ │ │ │ mov 0x188(%rsp),%rsi │ │ │ │ - lea 0x3078cd(%rip),%r8 │ │ │ │ - lea 0x307b46(%rip),%rcx │ │ │ │ + lea 0x30fdcd(%rip),%r8 │ │ │ │ + lea 0x327a46(%rip),%rcx │ │ │ │ lea 0x55dedf(%rip),%rdi # fab880 ::id@GLIBCXX_3.4+0xa380> │ │ │ │ call a57b80 │ │ │ │ lea 0xd80(%rsp),%rax │ │ │ │ lea 0x24d159(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1b8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xd60(%rsp),%rax │ │ │ │ lea 0x24d127(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1a8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x1b8(%rsp),%rdx │ │ │ │ mov 0x1a8(%rsp),%rsi │ │ │ │ - lea 0x3075c5(%rip),%r8 │ │ │ │ - lea 0x307ade(%rip),%rcx │ │ │ │ + lea 0x326d05(%rip),%r8 │ │ │ │ + lea 0x3279de(%rip),%rcx │ │ │ │ lea 0x55dec7(%rip),%rdi # fab8d0 ::id@GLIBCXX_3.4+0xa3d0> │ │ │ │ call a57b80 │ │ │ │ lea 0xdc0(%rsp),%rax │ │ │ │ lea 0x24cd75(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1d8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xda0(%rsp),%rax │ │ │ │ lea 0x24d0e6(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1c8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x1d8(%rsp),%rdx │ │ │ │ mov 0x1c8(%rsp),%rsi │ │ │ │ - lea 0x30ad1d(%rip),%r8 │ │ │ │ - lea 0x30bd16(%rip),%rcx │ │ │ │ + lea 0x314cbd(%rip),%r8 │ │ │ │ + lea 0x30cc36(%rip),%rcx │ │ │ │ lea 0x55deaf(%rip),%rdi # fab920 ::id@GLIBCXX_3.4+0xa420> │ │ │ │ call a57b80 │ │ │ │ lea 0xe00(%rsp),%rax │ │ │ │ lea 0x24cd3a(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x208(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xde0(%rsp),%rax │ │ │ │ lea 0x24d09b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1f0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x208(%rsp),%rdx │ │ │ │ mov 0x1f0(%rsp),%rsi │ │ │ │ - lea 0x322475(%rip),%r8 │ │ │ │ - lea 0x3234ae(%rip),%rcx │ │ │ │ + lea 0x30f075(%rip),%r8 │ │ │ │ + lea 0x31e28e(%rip),%rcx │ │ │ │ lea 0x55de97(%rip),%rdi # fab970 ::id@GLIBCXX_3.4+0xa470> │ │ │ │ call a57b80 │ │ │ │ lea 0xe40(%rsp),%rax │ │ │ │ lea 0x24cccb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x238(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xe20(%rsp),%rax │ │ │ │ lea 0x27cbac(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x220(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x238(%rsp),%rdx │ │ │ │ mov 0x220(%rsp),%rsi │ │ │ │ - lea 0x3108ad(%rip),%r8 │ │ │ │ - lea 0x311606(%rip),%rcx │ │ │ │ + lea 0x30986d(%rip),%r8 │ │ │ │ + lea 0x317f86(%rip),%rcx │ │ │ │ lea 0x55de7f(%rip),%rdi # fab9c0 ::id@GLIBCXX_3.4+0xa4c0> │ │ │ │ call a57b80 │ │ │ │ lea 0xe80(%rsp),%rax │ │ │ │ lea 0x24cc8d(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x268(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xe60(%rsp),%rax │ │ │ │ lea 0x24cfe3(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x250(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x268(%rsp),%rdx │ │ │ │ mov 0x250(%rsp),%rsi │ │ │ │ - lea 0x32b485(%rip),%r8 │ │ │ │ - lea 0x32c3de(%rip),%rcx │ │ │ │ + lea 0x31d9c5(%rip),%r8 │ │ │ │ + lea 0x32099e(%rip),%rcx │ │ │ │ lea 0x55de67(%rip),%rdi # faba10 ::id@GLIBCXX_3.4+0xa510> │ │ │ │ call a57b80 │ │ │ │ lea 0xec0(%rsp),%rax │ │ │ │ lea 0x24cc25(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x298(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xea0(%rsp),%rax │ │ │ │ lea 0x24cf7b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x280(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x298(%rsp),%rdx │ │ │ │ mov 0x280(%rsp),%rsi │ │ │ │ - lea 0x32b41d(%rip),%r8 │ │ │ │ - lea 0x32c376(%rip),%rcx │ │ │ │ + lea 0x31d95d(%rip),%r8 │ │ │ │ + lea 0x320936(%rip),%rcx │ │ │ │ lea 0x55de4f(%rip),%rdi # faba60 ::id@GLIBCXX_3.4+0xa560> │ │ │ │ call a57b80 │ │ │ │ lea 0xf00(%rsp),%rax │ │ │ │ lea 0x24cbbd(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2c8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xee0(%rsp),%rax │ │ │ │ lea 0x24cf13(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2b0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x2c8(%rsp),%rdx │ │ │ │ mov 0x2b0(%rsp),%rsi │ │ │ │ - lea 0x32b3b5(%rip),%r8 │ │ │ │ - lea 0x32c30e(%rip),%rcx │ │ │ │ + lea 0x31d8f5(%rip),%r8 │ │ │ │ + lea 0x3208ce(%rip),%rcx │ │ │ │ lea 0x55de37(%rip),%rdi # fabab0 ::id@GLIBCXX_3.4+0xa5b0> │ │ │ │ call a57b80 │ │ │ │ lea 0xf40(%rsp),%rax │ │ │ │ lea 0x24cb55(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2f8(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xf20(%rsp),%rax │ │ │ │ lea 0x24ceab(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2e0(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x2f8(%rsp),%rdx │ │ │ │ mov 0x2e0(%rsp),%rsi │ │ │ │ - lea 0x32b34d(%rip),%r8 │ │ │ │ - lea 0x32c2a6(%rip),%rcx │ │ │ │ + lea 0x31d88d(%rip),%r8 │ │ │ │ + lea 0x320866(%rip),%rcx │ │ │ │ lea 0x55de1f(%rip),%rdi # fabb00 ::id@GLIBCXX_3.4+0xa600> │ │ │ │ call a57b80 │ │ │ │ lea 0xf80(%rsp),%rax │ │ │ │ lea 0x24cb09(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x328(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xf60(%rsp),%rax │ │ │ │ lea 0x24ce5b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x310(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x328(%rsp),%rdx │ │ │ │ mov 0x310(%rsp),%rsi │ │ │ │ - lea 0x31df85(%rip),%r8 │ │ │ │ - lea 0x32057e(%rip),%rcx │ │ │ │ + lea 0x30e925(%rip),%r8 │ │ │ │ + lea 0x3074de(%rip),%rcx │ │ │ │ lea 0x55de07(%rip),%rdi # fabb50 ::id@GLIBCXX_3.4+0xa650> │ │ │ │ call a57b80 │ │ │ │ lea 0xfc0(%rsp),%rax │ │ │ │ lea 0x24caa1(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x358(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xfa0(%rsp),%rax │ │ │ │ lea 0x24ce0f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x340(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x358(%rsp),%rdx │ │ │ │ mov 0x340(%rsp),%rsi │ │ │ │ - lea 0x31df1d(%rip),%r8 │ │ │ │ - lea 0x31ee76(%rip),%rcx │ │ │ │ + lea 0x30e8bd(%rip),%r8 │ │ │ │ + lea 0x32bed6(%rip),%rcx │ │ │ │ lea 0x55ddef(%rip),%rdi # fabba0 ::id@GLIBCXX_3.4+0xa6a0> │ │ │ │ call a57b80 │ │ │ │ lea 0x1000(%rsp),%rax │ │ │ │ lea 0x24cdd9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x10(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0xfe0(%rsp),%rax │ │ │ │ lea 0x24cdc9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x370(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x10(%rsp),%rdx │ │ │ │ mov 0x370(%rsp),%rsi │ │ │ │ - lea 0x3258fb(%rip),%r8 │ │ │ │ - lea 0x325f94(%rip),%rcx │ │ │ │ + lea 0x3050bb(%rip),%r8 │ │ │ │ + lea 0x327e74(%rip),%rcx │ │ │ │ lea 0x55dddd(%rip),%rdi # fabbf0 ::id@GLIBCXX_3.4+0xa6f0> │ │ │ │ call a57b80 │ │ │ │ lea 0x1040(%rsp),%rax │ │ │ │ lea 0x24cd8f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x40(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x1020(%rsp),%rax │ │ │ │ lea 0x24cd84(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x28(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x40(%rsp),%rdx │ │ │ │ mov 0x28(%rsp),%rsi │ │ │ │ - lea 0x327cbf(%rip),%r8 │ │ │ │ - lea 0x328038(%rip),%rcx │ │ │ │ + lea 0x3211df(%rip),%r8 │ │ │ │ + lea 0x316498(%rip),%rcx │ │ │ │ lea 0x55ddd1(%rip),%rdi # fabc40 ::id@GLIBCXX_3.4+0xa740> │ │ │ │ call a57b80 │ │ │ │ lea 0x1080(%rsp),%rax │ │ │ │ lea 0x24cd55(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x70(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x1060(%rsp),%rax │ │ │ │ lea 0x24cd4c(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x58(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x70(%rsp),%rdx │ │ │ │ mov 0x58(%rsp),%rsi │ │ │ │ - lea 0x326ba3(%rip),%r8 │ │ │ │ - lea 0x32707c(%rip),%rcx │ │ │ │ + lea 0x318f43(%rip),%r8 │ │ │ │ + lea 0x305a7c(%rip),%rcx │ │ │ │ lea 0x55ddc5(%rip),%rdi # fabc90 ::id@GLIBCXX_3.4+0xa790> │ │ │ │ call a57b80 │ │ │ │ lea 0x10c0(%rsp),%rax │ │ │ │ lea 0x24cd1f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xa0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x10a0(%rsp),%rax │ │ │ │ lea 0x24cd14(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x88(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0xa0(%rsp),%rdx │ │ │ │ mov 0x88(%rsp),%rsi │ │ │ │ - lea 0x3249bb(%rip),%r8 │ │ │ │ - lea 0x324bd4(%rip),%rcx │ │ │ │ + lea 0x31c79b(%rip),%r8 │ │ │ │ + lea 0x30dd74(%rip),%rcx │ │ │ │ lea 0x55ddad(%rip),%rdi # fabce0 ::id@GLIBCXX_3.4+0xa7e0> │ │ │ │ call a57b80 │ │ │ │ lea 0x1100(%rsp),%rax │ │ │ │ lea 0x24ccdf(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xd0(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x10e0(%rsp),%rax │ │ │ │ lea 0x24ccac(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xb8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0xd0(%rsp),%rdx │ │ │ │ mov 0xb8(%rsp),%rsi │ │ │ │ - lea 0x325533(%rip),%r8 │ │ │ │ - lea 0x324b6c(%rip),%rcx │ │ │ │ + lea 0x30c073(%rip),%r8 │ │ │ │ + lea 0x30dd0c(%rip),%rcx │ │ │ │ lea 0x55dd95(%rip),%rdi # fabd30 ::id@GLIBCXX_3.4+0xa830> │ │ │ │ call a57b80 │ │ │ │ lea 0x1140(%rsp),%rax │ │ │ │ lea 0x24cc91(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x100(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x1120(%rsp),%rax │ │ │ │ lea 0x24cc81(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xe8(%rsp) │ │ │ │ call a47f50 │ │ │ │ mov 0x100(%rsp),%rdx │ │ │ │ mov 0xe8(%rsp),%rsi │ │ │ │ - lea 0x31ba0b(%rip),%r8 │ │ │ │ - lea 0x31c144(%rip),%rcx │ │ │ │ + lea 0x31a82b(%rip),%r8 │ │ │ │ + lea 0x319f24(%rip),%rcx │ │ │ │ lea 0x55dd7d(%rip),%rdi # fabd80 ::id@GLIBCXX_3.4+0xa880> │ │ │ │ call a57b80 │ │ │ │ lea 0x1180(%rsp),%rax │ │ │ │ lea 0x24cc47(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x128(%rsp) │ │ │ │ call a47f50 │ │ │ │ lea 0x24cc49(%rip),%rsi │ │ │ │ lea 0x1160(%rsp),%rdi │ │ │ │ call a47f50 │ │ │ │ mov 0x128(%rsp),%rdx │ │ │ │ - lea 0x319b96(%rip),%r8 │ │ │ │ - lea 0x31af8f(%rip),%rcx │ │ │ │ + lea 0x328c76(%rip),%r8 │ │ │ │ + lea 0x32ac4f(%rip),%rcx │ │ │ │ lea 0x1160(%rsp),%rsi │ │ │ │ lea 0x55dd70(%rip),%rdi # fabdd0 ::id@GLIBCXX_3.4+0xa8d0> │ │ │ │ call a57b80 │ │ │ │ lea 0x24cc24(%rip),%rsi │ │ │ │ lea 0x11c0(%rsp),%rdi │ │ │ │ call a47f50 │ │ │ │ lea 0x24cc1f(%rip),%rsi │ │ │ │ lea 0x11a0(%rsp),%rdi │ │ │ │ call a47f50 │ │ │ │ - lea 0x31c9ac(%rip),%r8 │ │ │ │ - lea 0x31d005(%rip),%rcx │ │ │ │ + lea 0x30a22c(%rip),%r8 │ │ │ │ + lea 0x30a885(%rip),%rcx │ │ │ │ lea 0x11c0(%rsp),%rdx │ │ │ │ lea 0x11a0(%rsp),%rsi │ │ │ │ lea 0x55dd6e(%rip),%rdi # fabe20 ::id@GLIBCXX_3.4+0xa920> │ │ │ │ call a57b80 │ │ │ │ lea 0x24cbf0(%rip),%rsi │ │ │ │ lea 0x1200(%rsp),%rdi │ │ │ │ call a47f50 │ │ │ │ lea 0x11e0(%rsp),%rbp │ │ │ │ lea 0x24cbde(%rip),%rsi │ │ │ │ mov %rbp,%rdi │ │ │ │ call a47f50 │ │ │ │ - lea 0x30e8d7(%rip),%r8 │ │ │ │ - lea 0x30eb30(%rip),%rcx │ │ │ │ + lea 0x31f037(%rip),%r8 │ │ │ │ + lea 0x310e90(%rip),%rcx │ │ │ │ mov %rbp,%rsi │ │ │ │ lea 0x1200(%rsp),%rdx │ │ │ │ lea 0x55dd6e(%rip),%rdi # fabe70 ::id@GLIBCXX_3.4+0xa970> │ │ │ │ call a57b80 │ │ │ │ mov %r13,%rsi │ │ │ │ lea 0x54ef77(%rip),%rdx │ │ │ │ lea 0x95a8(%rip),%rdi │ │ │ │ @@ -2604395,15 +2604395,15 @@ │ │ │ │ mov %rbx,%rax │ │ │ │ movq $0x1b,0x8(%rbx) │ │ │ │ pop %rbx │ │ │ │ ret │ │ │ │ nop │ │ │ │ cs nopw 0x0(%rax,%rax,1) │ │ │ │ endbr64 │ │ │ │ - mov $0x3f882,%eax │ │ │ │ + mov $0x3f883,%eax │ │ │ │ ret │ │ │ │ nopw 0x0(%rax,%rax,1) │ │ │ │ endbr64 │ │ │ │ test %rdi,%rdi │ │ │ │ je ba07b0 │ │ │ │ mov (%rdi),%rax │ │ │ │ lea -0x4513(%rip),%rdx │ │ │ ├── readelf --wide --decompress --hex-dump=.rodata {} │ │ │ │ @@ -21503,15 +21503,15 @@ │ │ │ │ 0x00cd9fc0 7b227365 72766572 73223a5b 22687474 {"servers":["htt │ │ │ │ 0x00cd9fd0 70733a2f 2f63646e 2d6e6c31 2e6f7267 ps://cdn-nl1.org │ │ │ │ 0x00cd9fe0 616e6963 6d617073 2e617070 2f222c22 anicmaps.app/"," │ │ │ │ 0x00cd9ff0 68747470 733a2f2f 63646e2d 756b312e https://cdn-uk1. │ │ │ │ 0x00cda000 6f726761 6e69636d 6170732e 6170702f organicmaps.app/ │ │ │ │ 0x00cda010 222c2268 74747073 3a2f2f63 646e2e6f ","https://cdn.o │ │ │ │ 0x00cda020 7267616e 69636d61 70732e61 70702f22 rganicmaps.app/" │ │ │ │ - 0x00cda030 32303236 2e30322e 32362d30 2d303030 2026.02.26-0-000 │ │ │ │ + 0x00cda030 32303236 2e30322e 32372d30 2d303030 2026.02.27-0-000 │ │ │ │ 0x00cda040 302d3030 30303030 30302d4c 696e7578 0-00000000-Linux │ │ │ │ 0x00cda050 70726f64 75637473 5f736574 74696e67 products_setting │ │ │ │ 0x00cda060 70020000 00000000 00000000 00000000 p............... │ │ │ │ 0x00cda070 22706c61 63655061 67655072 6f6d7074 "placePagePrompt │ │ │ │ 0x00cda080 00000000 00000000 0e000000 00000000 ................ │ │ │ │ 0x00cda090 43484543 4b286375 72722e6d 5f64656c CHECK(curr.m_del │ │ │ │ 0x00cda0a0 656c7461 203e3e20 3632203d 3d203029 elta >> 62 == 0) │ │ │ │ @@ -52429,10213 +52429,10213 @@ │ │ │ │ 0x00d52ca0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ 0x00d52cb0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ 0x00d52cc0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ 0x00d52cd0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ 0x00d52ce0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ 0x00d52cf0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ 0x00d52d00 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00d52d10 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ - 0x00d52d20 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ - 0x00d52d30 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00d52d40 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00d52d50 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00d52d60 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d52d70 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ - 0x00d52d80 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ - 0x00d52d90 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ - 0x00d52da0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00d52db0 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ - 0x00d52dc0 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ - 0x00d52dd0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d52de0 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00d52df0 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00d52e00 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ - 0x00d52e10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d52e20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d52e30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d52e40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d52e50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d52e60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d52e70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d52e80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d52e90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d52ea0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d52eb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d52ec0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d52ed0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d52ee0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d52ef0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d52f00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d52f10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d52f20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d52f30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d52f40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d52f50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d52f60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d52f70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d52f80 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d52f90 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d52fa0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d52fb0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d52fc0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d52fd0 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ - 0x00d52fe0 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ - 0x00d52ff0 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ - 0x00d53000 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ - 0x00d53010 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ - 0x00d53020 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ - 0x00d53030 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ - 0x00d53040 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00d53050 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ - 0x00d53060 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ - 0x00d53070 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d53080 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00d53090 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ - 0x00d530a0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d530b0 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ - 0x00d530c0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d530d0 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ - 0x00d530e0 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ - 0x00d530f0 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ - 0x00d53100 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ - 0x00d53110 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ - 0x00d53120 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ - 0x00d53130 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d53140 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d53150 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00d53160 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d53170 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d53180 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d53190 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00d531a0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00d531b0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00d531c0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00d531d0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00d531e0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00d531f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d53200 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00d53210 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00d53220 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d53230 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d53240 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00d53250 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d53260 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00d53270 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00d53280 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d53290 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d532a0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00d532b0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00d532c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d532d0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00d532e0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00d532f0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00d53300 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d53310 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00d53320 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00d53330 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00d53340 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00d53350 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d53360 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d53370 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d53380 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00d53390 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00d533a0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00d533b0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00d533c0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00d533d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d533e0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d533f0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00d53400 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00d53410 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00d53420 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00d53430 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d53440 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00d53450 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d53460 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00d53470 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d53480 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00d53490 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00d534a0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00d534b0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00d534c0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00d534d0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d534e0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00d534f0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00d53500 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00d53510 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00d53520 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00d53530 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d53540 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d53550 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00d53560 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00d53570 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00d53580 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00d53590 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00d535a0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00d535b0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00d535c0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00d535d0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00d535e0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00d535f0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00d53600 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00d53610 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00d53620 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d53630 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00d53640 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00d53650 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d53660 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00d53670 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00d53680 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00d53690 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d536a0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00d536b0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d536c0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00d536d0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00d536e0 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00d536f0 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ - 0x00d53700 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ - 0x00d53710 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ - 0x00d53720 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ - 0x00d53730 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00d53740 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ - 0x00d53750 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ - 0x00d53760 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ - 0x00d53770 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ - 0x00d53780 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ - 0x00d53790 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ - 0x00d537a0 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ - 0x00d537b0 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ - 0x00d537c0 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ - 0x00d537d0 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ - 0x00d537e0 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ - 0x00d537f0 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ - 0x00d53800 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d53810 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ - 0x00d53820 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ - 0x00d53830 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ - 0x00d53840 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ - 0x00d53850 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ - 0x00d53860 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ - 0x00d53870 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ - 0x00d53880 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ - 0x00d53890 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ - 0x00d538a0 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ - 0x00d538b0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d538c0 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ - 0x00d538d0 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ - 0x00d538e0 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ - 0x00d538f0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d53900 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ - 0x00d53910 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ - 0x00d53920 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ - 0x00d53930 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ - 0x00d53940 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ - 0x00d53950 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ - 0x00d53960 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ - 0x00d53970 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d53980 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d53990 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d539a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d539b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d539c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d539d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d539e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d539f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d53a00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d53a10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d53a20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d53a30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d53a40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d53a50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d53a60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d53a70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d53a80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d53a90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d53aa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d53ab0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d53ac0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d53ad0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d53ae0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d53af0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00d53b00 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00d53b10 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00d53b20 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00d53b30 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00d53b40 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00d53b50 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00d53b60 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d53b70 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d53b80 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d53b90 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d53ba0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d53bb0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d53bc0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d53bd0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d53be0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00d53bf0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00d53c00 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00d53c10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d53c20 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00d53c30 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00d53c40 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00d53c50 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00d53c60 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00d53c70 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00d53c80 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00d53c90 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00d53ca0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d53cb0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d53cc0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00d53cd0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d53ce0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d53cf0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d53d00 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00d53d10 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00d53d20 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00d53d30 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00d53d40 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00d53d50 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00d53d60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d53d70 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00d53d80 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00d53d90 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d53da0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d53db0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00d53dc0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d53dd0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00d53de0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00d53df0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d53e00 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d53e10 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00d53e20 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00d53e30 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d53e40 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00d53e50 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00d53e60 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00d53e70 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d53e80 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00d53e90 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00d53ea0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00d53eb0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00d53ec0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d53ed0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d53ee0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d53ef0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00d53f00 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00d53f10 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00d53f20 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00d53f30 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00d53f40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d53f50 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d53f60 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00d53f70 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00d53f80 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00d53f90 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00d53fa0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d53fb0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00d53fc0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d53fd0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00d53fe0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d53ff0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00d54000 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00d54010 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00d54020 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00d54030 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00d54040 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d54050 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00d54060 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00d54070 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00d54080 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00d54090 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00d540a0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d540b0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d540c0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00d540d0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00d540e0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00d540f0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00d54100 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00d54110 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00d54120 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00d54130 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00d54140 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00d54150 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00d54160 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00d54170 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00d54180 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00d54190 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d541a0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00d541b0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00d541c0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d541d0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00d541e0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00d541f0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00d54200 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d54210 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00d54220 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d54230 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00d54240 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00d54250 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00d54260 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ - 0x00d54270 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ - 0x00d54280 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ - 0x00d54290 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ - 0x00d542a0 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00d542b0 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ - 0x00d542c0 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ - 0x00d542d0 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ - 0x00d542e0 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ - 0x00d542f0 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ - 0x00d54300 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ - 0x00d54310 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ - 0x00d54320 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ - 0x00d54330 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ - 0x00d54340 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ - 0x00d54350 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ - 0x00d54360 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d54370 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00d54380 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00d54390 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00d543a0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00d543b0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00d543c0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00d543d0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d543e0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00d543f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d54400 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d54410 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d54420 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d54430 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d54440 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d54450 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d54460 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d54470 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d54480 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d54490 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d544a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d544b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d544c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d544d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d544e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d544f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d54500 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d54510 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d54520 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d54530 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d54540 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d54550 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00d54560 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00d54570 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d54580 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ - 0x00d54590 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ - 0x00d545a0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ - 0x00d545b0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00d545c0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d545d0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ - 0x00d545e0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ - 0x00d545f0 673b200a 2020636f 6e737420 76656333 g; . const vec3 │ │ │ │ - 0x00d54600 206c6967 68744469 72203d20 76656333 lightDir = vec3 │ │ │ │ - 0x00d54610 28302e33 31362c20 302e302c 20302e39 (0.316, 0.0, 0.9 │ │ │ │ - 0x00d54620 3438293b 200a2020 636f6e73 7420666c 48); . const fl │ │ │ │ - 0x00d54630 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00d54640 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00d54650 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d54660 20207b20 0a202020 20666c6f 61742070 { . float p │ │ │ │ - 0x00d54670 686f6e67 44696666 75736520 3d206d61 hongDiffuse = ma │ │ │ │ - 0x00d54680 7828302e 302c202d 646f7428 6c696768 x(0.0, -dot(ligh │ │ │ │ - 0x00d54690 74446972 2c20765f 6e6f726d 616c2929 tDir, v_normal)) │ │ │ │ - 0x00d546a0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00d546b0 6f72203d 20766563 34282870 686f6e67 or = vec4((phong │ │ │ │ - 0x00d546c0 44696666 75736520 2a20302e 35202b20 Diffuse * 0.5 + │ │ │ │ - 0x00d546d0 302e3529 202a2075 5f636f6c 6f722e72 0.5) * u_color.r │ │ │ │ - 0x00d546e0 67622c20 755f636f 6c6f722e 61293b20 gb, u_color.a); │ │ │ │ - 0x00d546f0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d54700 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d54710 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d54720 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d54730 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d54740 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d54750 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d54760 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d54770 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d54780 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d54790 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d547a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d547b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d547c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d547d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d547e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d547f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d54800 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d54810 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d54820 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d54830 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d54840 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d54850 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00d54860 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00d54870 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ - 0x00d54880 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ - 0x00d54890 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ - 0x00d548a0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d548b0 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ - 0x00d548c0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d548d0 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ - 0x00d548e0 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00d548f0 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ - 0x00d54900 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d54910 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d54920 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d54930 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00d54940 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00d54950 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00d54960 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00d54970 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00d54980 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d54990 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d549a0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00d549b0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00d549c0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00d549d0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d549e0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00d549f0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00d54a00 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00d54a10 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00d54a20 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00d54a30 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00d54a40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d54a50 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00d54a60 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00d54a70 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d54a80 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00d54a90 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00d54aa0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d54ab0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00d54ac0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00d54ad0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00d54ae0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d54af0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00d54b00 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00d54b10 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00d54b20 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d54b30 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d54b40 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d54b50 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d54b60 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00d54b70 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00d54b80 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00d54b90 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00d54ba0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00d54bb0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d54bc0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d54bd0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00d54be0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00d54bf0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00d54c00 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00d54c10 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00d54c20 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00d54c30 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d54c40 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00d54c50 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d54c60 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00d54c70 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00d54c80 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00d54c90 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00d54ca0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00d54cb0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d54cc0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00d54cd0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00d54ce0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00d54cf0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00d54d00 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00d54d10 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d54d20 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00d54d30 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00d54d40 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00d54d50 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00d54d60 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00d54d70 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00d54d80 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00d54d90 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00d54da0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00d54db0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00d54dc0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00d54dd0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00d54de0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00d54df0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00d54e00 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00d54e10 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00d54e20 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00d54e30 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d54e40 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00d54e50 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00d54e60 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00d54e70 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d54e80 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00d54e90 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d54ea0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d54eb0 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ - 0x00d54ec0 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ - 0x00d54ed0 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ - 0x00d54ee0 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ - 0x00d54ef0 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ - 0x00d54f00 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ - 0x00d54f10 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ - 0x00d54f20 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d54f30 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ - 0x00d54f40 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d54f50 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ - 0x00d54f60 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ - 0x00d54f70 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ - 0x00d54f80 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ - 0x00d54f90 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ - 0x00d54fa0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00d54fb0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00d54fc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d54fd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d54fe0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d54ff0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d55000 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d55010 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d55020 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d55030 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d55040 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d55050 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d55060 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d55070 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d55080 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d55090 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d550a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d550b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d550c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d550d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d550e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d550f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d55100 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ - 0x00d55110 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ - 0x00d55120 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d55130 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d55140 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ - 0x00d55150 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d55160 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ - 0x00d55170 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d55180 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00d55190 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d551a0 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ - 0x00d551b0 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ - 0x00d551c0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d551d0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d551e0 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d551f0 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ - 0x00d55200 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ - 0x00d55210 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ - 0x00d55220 6f722e61 202a2073 6d6f6f74 68737465 or.a * smoothste │ │ │ │ - 0x00d55230 7028302e 372c2031 2e302c20 765f696e p(0.7, 1.0, v_in │ │ │ │ - 0x00d55240 74656e73 69747929 293b200a 20207d20 tensity)); . } │ │ │ │ - 0x00d55250 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d55260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d55270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d55280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d55290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d552a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d552b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d552c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d552d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d552e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d552f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d55300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d55310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d55320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d55330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d55340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d55350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d55360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d55370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d55380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d55390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d553a0 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ - 0x00d553b0 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ - 0x00d553c0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d553d0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d553e0 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ - 0x00d553f0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d55400 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ - 0x00d55410 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d55420 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00d55430 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d55440 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ - 0x00d55450 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ - 0x00d55460 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d55470 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d55480 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d55490 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ - 0x00d554a0 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ - 0x00d554b0 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ - 0x00d554c0 6f722e61 202a2076 5f696e74 656e7369 or.a * v_intensi │ │ │ │ - 0x00d554d0 7479293b 200a2020 7d200a00 00000000 ty); . } ...... │ │ │ │ - 0x00d554e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d554f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d55500 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d55510 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d55520 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d55530 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d55540 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d55550 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d55560 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d55570 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d55580 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d55590 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d555a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d555b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d555c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d555d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d555e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d555f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d55600 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d55610 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d55620 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d55630 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00d55640 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ - 0x00d55650 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ - 0x00d55660 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ - 0x00d55670 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ - 0x00d55680 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ - 0x00d55690 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ - 0x00d556a0 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ - 0x00d556b0 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ - 0x00d556c0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d556d0 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ - 0x00d556e0 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ - 0x00d556f0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d55700 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d55710 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00d55720 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d55730 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d55740 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d55750 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d55760 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00d55770 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d55780 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00d55790 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00d557a0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00d557b0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d557c0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00d557d0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d557e0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d557f0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d55800 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00d55810 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d55820 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00d55830 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00d55840 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d55850 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d55860 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00d55870 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00d55880 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d55890 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00d558a0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00d558b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d558c0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d558d0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d558e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d558f0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00d55900 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d55910 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d55920 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d55930 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d55940 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00d55950 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00d55960 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00d55970 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00d55980 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00d55990 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d559a0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00d559b0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00d559c0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d559d0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00d559e0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00d559f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d55a00 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00d55a10 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00d55a20 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00d55a30 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d55a40 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00d55a50 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00d55a60 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00d55a70 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00d55a80 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00d55a90 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00d55aa0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00d55ab0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00d55ac0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00d55ad0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00d55ae0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00d55af0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00d55b00 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d55b10 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00d55b20 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00d55b30 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00d55b40 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00d55b50 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00d55b60 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00d55b70 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00d55b80 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00d55b90 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00d55ba0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00d55bb0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00d55bc0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d55bd0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00d55be0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d55bf0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00d55c00 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00d55c10 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00d55c20 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00d55c30 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00d55c40 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00d55c50 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d55c60 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d55c70 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00d55c80 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d55c90 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ - 0x00d55ca0 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ - 0x00d55cb0 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ - 0x00d55cc0 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ - 0x00d55cd0 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ - 0x00d55ce0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00d55cf0 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ - 0x00d55d00 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d55d10 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00d55d20 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00d55d30 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d55d40 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00d55d50 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ - 0x00d55d60 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ - 0x00d55d70 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ - 0x00d55d80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d55d90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d55da0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d55db0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d55dc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d55dd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d55de0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d55df0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d55e00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d55e10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d55e20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d55e30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d55e40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d55e50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d55e60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d55e70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d55e80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d55e90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d55ea0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d55eb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d55ec0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d55ed0 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00d55ee0 696e2076 65633220 765f7465 78436f6f in vec2 v_texCoo │ │ │ │ - 0x00d55ef0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d55f00 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d55f10 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d55f20 7472616e 73666f72 6d3b200a 2020756e transform; . un │ │ │ │ - 0x00d55f30 69666f72 6d206d61 74342075 5f6e6f72 iform mat4 u_nor │ │ │ │ - 0x00d55f40 6d616c54 72616e73 666f726d 3b200a20 malTransform; . │ │ │ │ - 0x00d55f50 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00d55f60 636f6c6f 723b200a 2020756e 69666f72 color; . unifor │ │ │ │ - 0x00d55f70 6d207665 63322075 5f746578 436f6f72 m vec2 u_texCoor │ │ │ │ - 0x00d55f80 64466c69 7070696e 673b200a 2020756e dFlipping; . un │ │ │ │ - 0x00d55f90 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00d55fa0 755f636f 6c6f7254 65783b20 0a202063 u_colorTex; . c │ │ │ │ - 0x00d55fb0 6f6e7374 20766563 33206c69 67687444 onst vec3 lightD │ │ │ │ - 0x00d55fc0 6972203d 20766563 3328302e 3331362c ir = vec3(0.316, │ │ │ │ - 0x00d55fd0 20302e30 2c20302e 39343829 3b200a20 0.0, 0.948); . │ │ │ │ - 0x00d55fe0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d55ff0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d56000 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ - 0x00d56010 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d56020 2020666c 6f617420 70686f6e 67446966 float phongDif │ │ │ │ - 0x00d56030 66757365 203d206d 61782830 2e302c20 fuse = max(0.0, │ │ │ │ - 0x00d56040 2d646f74 286c6967 68744469 722c2076 -dot(lightDir, v │ │ │ │ - 0x00d56050 5f6e6f72 6d616c29 293b200a 20202020 _normal)); . │ │ │ │ - 0x00d56060 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ - 0x00d56070 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ - 0x00d56080 20765f74 6578436f 6f726473 29202a20 v_texCoords) * │ │ │ │ - 0x00d56090 755f636f 6c6f723b 200a2020 2020765f u_color; . v_ │ │ │ │ - 0x00d560a0 46726167 436f6c6f 72203d20 76656334 FragColor = vec4 │ │ │ │ - 0x00d560b0 28287068 6f6e6744 69666675 7365202a ((phongDiffuse * │ │ │ │ - 0x00d560c0 20302e35 202b2030 2e352920 2a20636f 0.5 + 0.5) * co │ │ │ │ - 0x00d560d0 6c6f722e 7267622c 20636f6c 6f722e61 lor.rgb, color.a │ │ │ │ - 0x00d560e0 293b200a 20207d20 0a000000 00000000 ); . } ........ │ │ │ │ - 0x00d560f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d56100 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d56110 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d56120 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d56130 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d56140 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d56150 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d56160 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d56170 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d56180 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d56190 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d561a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d561b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d561c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d561d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d561e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d561f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d56200 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d56210 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d56220 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d56230 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d56240 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d56250 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00d56260 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00d56270 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00d56280 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ - 0x00d56290 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00d562a0 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ - 0x00d562b0 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00d562c0 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ - 0x00d562d0 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ - 0x00d562e0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ - 0x00d562f0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00d56300 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d56310 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ - 0x00d56320 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ - 0x00d56330 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ - 0x00d56340 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d56350 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d56360 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d56370 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d56380 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d56390 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d563a0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d563b0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d563c0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d563d0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d563e0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d563f0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d56400 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d56410 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d56420 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d56430 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d56440 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d56450 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d56460 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d56470 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d56480 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d56490 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d564a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d564b0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d564c0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d564d0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d564e0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d564f0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d56500 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d56510 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d56520 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d56530 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d56540 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d56550 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d56560 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d56570 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d56580 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d56590 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d565a0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d565b0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d565c0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d565d0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d565e0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d565f0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d56600 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d56610 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d56620 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d56630 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d56640 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d56650 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d56660 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d56670 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d56680 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d56690 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d566a0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d566b0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d566c0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d566d0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d566e0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d566f0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d56700 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d56710 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d56720 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d56730 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d56740 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d56750 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d56760 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d56770 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d56780 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d56790 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d567a0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d567b0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d567c0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d567d0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d567e0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d567f0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d56800 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d56810 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d56820 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d56830 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d56840 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d56850 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d56860 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d56870 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d56880 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d56890 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d568a0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d568b0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d568c0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d568d0 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00d568e0 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ - 0x00d568f0 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ - 0x00d56900 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ - 0x00d56910 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ - 0x00d56920 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ - 0x00d56930 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ - 0x00d56940 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ - 0x00d56950 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ - 0x00d56960 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ - 0x00d56970 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ - 0x00d56980 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ - 0x00d56990 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ - 0x00d569a0 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ - 0x00d569b0 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ - 0x00d569c0 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ - 0x00d569d0 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ - 0x00d569e0 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ - 0x00d569f0 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ - 0x00d56a00 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ - 0x00d56a10 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ - 0x00d56a20 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ - 0x00d56a30 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ - 0x00d56a40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d56a50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d56a60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d56a70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d56a80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d56a90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d56aa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d56ab0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d56ac0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d56ad0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d56ae0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d56af0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d56b00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d56b10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d56b20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d56b30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d56b40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d56b50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d56b60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d56b70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d56b80 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d56b90 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d56ba0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d56bb0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d56bc0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d56bd0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d56be0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d56bf0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d56c00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d56c10 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00d56c20 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00d56c30 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d56c40 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00d56c50 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00d56c60 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00d56c70 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d56c80 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d56c90 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00d56ca0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00d56cb0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00d56cc0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d56cd0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d56ce0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00d56cf0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00d56d00 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00d56d10 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d56d20 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00d56d30 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ - 0x00d56d40 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ - 0x00d56d50 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ - 0x00d56d60 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d56d70 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d56d80 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00d56d90 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ - 0x00d56da0 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ - 0x00d56db0 50207665 63342066 696e616c 436f6c6f P vec4 finalColo │ │ │ │ - 0x00d56dc0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ - 0x00d56dd0 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ - 0x00d56de0 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ - 0x00d56df0 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ - 0x00d56e00 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ - 0x00d56e10 78436f6f 72647329 3b200a20 2023656e xCoords); . #en │ │ │ │ - 0x00d56e20 64696620 0a202020 20666c6f 61742073 dif . float s │ │ │ │ - 0x00d56e30 6d616c6c 52616469 7573203d 20765f72 mallRadius = v_r │ │ │ │ - 0x00d56e40 61646975 732e7a20 2d206161 50697865 adius.z - aaPixe │ │ │ │ - 0x00d56e50 6c73436f 756e743b 200a2020 2020666c lsCount; . fl │ │ │ │ - 0x00d56e60 6f617420 73746570 56616c75 65203d20 oat stepValue = │ │ │ │ - 0x00d56e70 736d6f6f 74687374 65702873 6d616c6c smoothstep(small │ │ │ │ - 0x00d56e80 52616469 7573202a 20736d61 6c6c5261 Radius * smallRa │ │ │ │ - 0x00d56e90 64697573 2c20765f 72616469 75732e7a dius, v_radius.z │ │ │ │ - 0x00d56ea0 202a2076 5f726164 6975732e 7a2c200a * v_radius.z, . │ │ │ │ - 0x00d56eb0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d56ec0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d56ed0 20765f72 61646975 732e7820 2a20765f v_radius.x * v_ │ │ │ │ - 0x00d56ee0 72616469 75732e78 202b2076 5f726164 radius.x + v_rad │ │ │ │ - 0x00d56ef0 6975732e 79202a20 765f7261 64697573 ius.y * v_radius │ │ │ │ - 0x00d56f00 2e79293b 200a2020 20206669 6e616c43 .y); . finalC │ │ │ │ - 0x00d56f10 6f6c6f72 2e61203d 2066696e 616c436f olor.a = finalCo │ │ │ │ - 0x00d56f20 6c6f722e 61202a20 755f6f70 61636974 lor.a * u_opacit │ │ │ │ - 0x00d56f30 79202a20 28312e30 202d2073 74657056 y * (1.0 - stepV │ │ │ │ - 0x00d56f40 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ - 0x00d56f50 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d56f60 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d56f70 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d56f80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d56f90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d56fa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d56fb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d56fc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d56fd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d56fe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d56ff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d57000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d57010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d57020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d57030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d57040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d57050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d57060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d57070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d57080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d57090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d570a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d570b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d570c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d570d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d570e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d570f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d57100 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d57110 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d57120 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ - 0x00d57130 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ - 0x00d57140 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ - 0x00d57150 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00d57160 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00d57170 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ - 0x00d57180 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ - 0x00d57190 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d571a0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d571b0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d571c0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d571d0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d571e0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d571f0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d57200 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d57210 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d57220 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d57230 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d57240 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d57250 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d57260 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d57270 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d57280 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d57290 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00d572a0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00d572b0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00d572c0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d572d0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d572e0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d572f0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d57300 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d57310 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d57320 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d57330 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d57340 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d57350 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d57360 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d57370 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d57380 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d57390 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d573a0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d573b0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d573c0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d573d0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d573e0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d573f0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d57400 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d57410 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d57420 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d57430 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d57440 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d57450 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d57460 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d57470 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d57480 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d57490 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d574a0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d574b0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d574c0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d574d0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d574e0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d574f0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d57500 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d57510 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d57520 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d57530 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d57540 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d57550 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d57560 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d57570 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d57580 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d57590 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d575a0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d575b0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d575c0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d575d0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d575e0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d575f0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d57600 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d57610 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d57620 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d57630 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d57640 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d57650 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d57660 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d57670 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d57680 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d57690 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d576a0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d576b0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d576c0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d576d0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d576e0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d576f0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d57700 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d57710 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d57720 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d57730 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d57740 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d57750 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d57760 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d57770 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d57780 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d57790 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d577a0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d577b0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d577c0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d577d0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d577e0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d577f0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d57800 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d57810 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d57820 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d57830 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d57840 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d57850 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d57860 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00d57870 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00d57880 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00d57890 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00d578a0 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00d578b0 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ - 0x00d578c0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d578d0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d578e0 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ - 0x00d578f0 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ - 0x00d57900 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00d57910 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d57920 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00d57930 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00d57940 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00d57950 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00d57960 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00d57970 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00d57980 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d57990 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ - 0x00d579a0 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ - 0x00d579b0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00d579c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d579d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d579e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d579f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d57a00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d57a10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d57a20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d57a30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d57a40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d57a50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d57a60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d57a70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d57a80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d57a90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d57aa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d57ab0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d57ac0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d57ad0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d57ae0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d57af0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d57b00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d57b10 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00d57b20 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d57b30 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d57b40 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d57b50 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d57b60 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d57b70 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d57b80 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d57b90 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d57ba0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d57bb0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d57bc0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d57bd0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d57be0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d57bf0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d57c00 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d57c10 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d57c20 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d57c30 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d57c40 733b200a 2020636f 6e737420 666c6f61 s; . const floa │ │ │ │ - 0x00d57c50 74206b41 6e746961 6c696173 696e6753 t kAntialiasingS │ │ │ │ - 0x00d57c60 63616c61 72203d20 302e393b 200a2020 calar = 0.9; . │ │ │ │ - 0x00d57c70 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d57c80 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d57c90 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ - 0x00d57ca0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d57cb0 20666c6f 61742064 203d2064 6f742876 float d = dot(v │ │ │ │ - 0x00d57cc0 5f726164 6975732e 78792c20 765f7261 _radius.xy, v_ra │ │ │ │ - 0x00d57cd0 64697573 2e787929 3b200a20 20202076 dius.xy); . v │ │ │ │ - 0x00d57ce0 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ - 0x00d57cf0 20765f63 6f6c6f72 3b200a20 20202066 v_color; . f │ │ │ │ - 0x00d57d00 6c6f6174 20616152 61646975 73203d20 loat aaRadius = │ │ │ │ - 0x00d57d10 765f7261 64697573 2e7a202a 206b416e v_radius.z * kAn │ │ │ │ - 0x00d57d20 7469616c 69617369 6e675363 616c6172 tialiasingScalar │ │ │ │ - 0x00d57d30 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ - 0x00d57d40 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ - 0x00d57d50 74657028 61615261 64697573 202a2061 tep(aaRadius * a │ │ │ │ - 0x00d57d60 61526164 6975732c 20765f72 61646975 aRadius, v_radiu │ │ │ │ - 0x00d57d70 732e7a20 2a20765f 72616469 75732e7a s.z * v_radius.z │ │ │ │ - 0x00d57d80 2c206429 3b200a20 20202066 696e616c , d); . final │ │ │ │ - 0x00d57d90 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ - 0x00d57da0 6f6c6f72 2e61202a 20755f6f 70616369 olor.a * u_opaci │ │ │ │ - 0x00d57db0 7479202a 2028312e 30202d20 73746570 ty * (1.0 - step │ │ │ │ - 0x00d57dc0 56616c75 65293b20 0a202020 20765f46 Value); . v_F │ │ │ │ - 0x00d57dd0 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ - 0x00d57de0 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ - 0x00d57df0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d57e00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d57e10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d57e20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d57e30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d57e40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d57e50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d57e60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d57e70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d57e80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d57e90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d57ea0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d57eb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d57ec0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d57ed0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d57ee0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d57ef0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d57f00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d57f10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d57f20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d57f30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d57f40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d57f50 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ - 0x00d57f60 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ - 0x00d57f70 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ - 0x00d57f80 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d57f90 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00d57fa0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00d57fb0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00d57fc0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d57fd0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d57fe0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d57ff0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d58000 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d58010 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d58020 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ - 0x00d58030 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d58040 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00d58050 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d58060 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ - 0x00d58070 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ - 0x00d58080 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ - 0x00d58090 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ - 0x00d580a0 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ - 0x00d580b0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d580c0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d580d0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00d580e0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d580f0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d58100 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d58110 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d58120 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00d58130 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d58140 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00d58150 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00d58160 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d58170 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d58180 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00d58190 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d581a0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d581b0 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00d581c0 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00d581d0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d581e0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00d581f0 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00d58200 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d58210 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00d58220 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00d58230 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d58240 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d58250 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00d58260 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d58270 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00d58280 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00d58290 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d582a0 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00d582b0 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00d582c0 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00d582d0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00d582e0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d582f0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d58300 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d58310 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00d58320 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00d58330 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00d58340 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00d58350 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d58360 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00d58370 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00d58380 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d58390 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00d583a0 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00d583b0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d583c0 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00d583d0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00d583e0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00d583f0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d58400 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00d58410 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00d58420 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00d58430 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00d58440 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00d58450 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00d58460 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d58470 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00d58480 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00d58490 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00d584a0 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00d584b0 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00d584c0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d584d0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00d584e0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00d584f0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00d58500 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00d58510 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00d58520 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00d58530 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00d58540 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00d58550 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00d58560 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00d58570 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00d58580 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00d58590 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00d585a0 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00d585b0 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00d585c0 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00d585d0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d585e0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00d585f0 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00d58600 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00d58610 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00d58620 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d58630 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00d58640 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d58650 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ - 0x00d58660 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ - 0x00d58670 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ - 0x00d58680 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00d58690 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ - 0x00d586a0 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ - 0x00d586b0 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ - 0x00d586c0 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ - 0x00d586d0 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ - 0x00d586e0 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ - 0x00d586f0 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00d58700 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ - 0x00d58710 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ - 0x00d58720 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00d58730 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00d58740 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ - 0x00d58750 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ - 0x00d58760 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00d58770 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00d58780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d58790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d587a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d587b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d587c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d587d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d587e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d587f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d58800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d58810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d58820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d58830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d58840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d58850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d58860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d58870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d58880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d58890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d588a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d588b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d588c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d588d0 63342076 5f6e6f72 6d616c3b 200a2020 c4 v_normal; . │ │ │ │ - 0x00d588e0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00d588f0 46200a20 20696e20 4c4f575f 50207665 F . in LOW_P ve │ │ │ │ - 0x00d58900 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00d58910 656c7365 200a2020 696e2076 65633220 else . in vec2 │ │ │ │ - 0x00d58920 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d58930 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ - 0x00d58940 706c6572 32442075 5f636f6c 6f725465 pler2D u_colorTe │ │ │ │ - 0x00d58950 783b200a 20202365 6e646966 200a2020 x; . #endif . │ │ │ │ - 0x00d58960 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00d58970 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d58980 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00d58990 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00d589a0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00d589b0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d589c0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d589d0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00d589e0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00d589f0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00d58a00 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d58a10 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d58a20 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00d58a30 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00d58a40 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00d58a50 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d58a60 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00d58a70 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ - 0x00d58a80 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ - 0x00d58a90 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ - 0x00d58aa0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d58ab0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d58ac0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00d58ad0 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ - 0x00d58ae0 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ - 0x00d58af0 50207665 63342063 6f6c6f72 203d2076 P vec4 color = v │ │ │ │ - 0x00d58b00 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ - 0x00d58b10 200a2020 20204c4f 575f5020 76656334 . LOW_P vec4 │ │ │ │ - 0x00d58b20 20636f6c 6f72203d 20746578 74757265 color = texture │ │ │ │ - 0x00d58b30 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ - 0x00d58b40 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ - 0x00d58b50 0a202023 656e6469 66200a20 20202066 . #endif . f │ │ │ │ - 0x00d58b60 6c6f6174 20723120 3d202876 5f6e6f72 loat r1 = (v_nor │ │ │ │ - 0x00d58b70 6d616c2e 7a202d20 61615069 78656c73 mal.z - aaPixels │ │ │ │ - 0x00d58b80 436f756e 7429202a 2028765f 6e6f726d Count) * (v_norm │ │ │ │ - 0x00d58b90 616c2e7a 202d2061 61506978 656c7343 al.z - aaPixelsC │ │ │ │ - 0x00d58ba0 6f756e74 293b200a 20202020 666c6f61 ount); . floa │ │ │ │ - 0x00d58bb0 74207232 203d2076 5f6e6f72 6d616c2e t r2 = v_normal. │ │ │ │ - 0x00d58bc0 78202a20 765f6e6f 726d616c 2e78202b x * v_normal.x + │ │ │ │ - 0x00d58bd0 20765f6e 6f726d61 6c2e7920 2a20765f v_normal.y * v_ │ │ │ │ - 0x00d58be0 6e6f726d 616c2e79 3b200a20 20202066 normal.y; . f │ │ │ │ - 0x00d58bf0 6c6f6174 20723320 3d20765f 6e6f726d loat r3 = v_norm │ │ │ │ - 0x00d58c00 616c2e7a 202a2076 5f6e6f72 6d616c2e al.z * v_normal. │ │ │ │ - 0x00d58c10 7a3b200a 20202020 666c6f61 7420616c z; . float al │ │ │ │ - 0x00d58c20 70686120 3d206d69 78287374 65702872 pha = mix(step(r │ │ │ │ - 0x00d58c30 332c2072 32292c20 736d6f6f 74687374 3, r2), smoothst │ │ │ │ - 0x00d58c40 65702872 312c2072 332c2072 32292c20 ep(r1, r3, r2), │ │ │ │ - 0x00d58c50 765f6e6f 726d616c 2e77293b 200a2020 v_normal.w); . │ │ │ │ - 0x00d58c60 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ - 0x00d58c70 616c436f 6c6f7220 3d20636f 6c6f723b alColor = color; │ │ │ │ - 0x00d58c80 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ - 0x00d58c90 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ - 0x00d58ca0 61202a20 755f6f70 61636974 79202a20 a * u_opacity * │ │ │ │ - 0x00d58cb0 28312e30 202d2061 6c706861 293b200a (1.0 - alpha); . │ │ │ │ - 0x00d58cc0 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ - 0x00d58cd0 6f722e61 203d3d20 302e3029 200a2020 or.a == 0.0) . │ │ │ │ - 0x00d58ce0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ - 0x00d58cf0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d58d00 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d58d10 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d58d20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d58d30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d58d40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d58d50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d58d60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d58d70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d58d80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d58d90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d58da0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d58db0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d58dc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d58dd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d58de0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d58df0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d58e00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d58e10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d58e20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d58e30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d58e40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d58e50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d58e60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d58e70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d58e80 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d58e90 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d58ea0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d58eb0 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00d58ec0 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00d58ed0 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00d58ee0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00d58ef0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d58f00 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d58f10 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d58f20 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d58f30 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d58f40 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d58f50 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d58f60 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d58f70 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d58f80 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d58f90 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d58fa0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d58fb0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d58fc0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d58fd0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d58fe0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d58ff0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d59000 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d59010 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d59020 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d59030 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00d59040 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00d59050 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00d59060 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d59070 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d59080 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d59090 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d590a0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d590b0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d590c0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d590d0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d590e0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d590f0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d59100 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d59110 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d59120 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d59130 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d59140 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d59150 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d59160 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d59170 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d59180 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d59190 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d591a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d591b0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d591c0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d591d0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d591e0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d591f0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d59200 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d59210 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d59220 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d59230 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d59240 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d59250 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d59260 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d59270 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d59280 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d59290 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d592a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d592b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d592c0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d592d0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d592e0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d592f0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d59300 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d59310 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d59320 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d59330 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d59340 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d59350 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d59360 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d59370 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d59380 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d59390 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d593a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d593b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d593c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d593d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d593e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d593f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d59400 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d59410 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d59420 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d59430 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d59440 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d59450 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d59460 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d59470 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d59480 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d59490 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d594a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d594b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d594c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d594d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d594e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d594f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d59500 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d59510 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d59520 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d59530 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d59540 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d59550 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d59560 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d59570 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d59580 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d59590 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d595a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d595b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d595c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d595d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d595e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d595f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d59600 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00d59610 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00d59620 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00d59630 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00d59640 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00d59650 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ - 0x00d59660 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ - 0x00d59670 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ - 0x00d59680 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00d59690 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ - 0x00d596a0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00d596b0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d596c0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d596d0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00d596e0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00d596f0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00d59700 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ - 0x00d59710 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ - 0x00d59720 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ - 0x00d59730 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ - 0x00d59740 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ - 0x00d59750 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ - 0x00d59760 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ - 0x00d59770 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d59780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d59790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d597a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d597b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d597c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d597d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d597e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d597f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d59800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d59810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d59820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d59830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d59840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d59850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d59860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d59870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d59880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d59890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d598a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d598b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d598c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d598d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d598e0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d598f0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d59900 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d59910 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00d59920 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00d59930 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00d59940 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00d59950 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d59960 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d59970 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d59980 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d59990 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d599a0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d599b0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d599c0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d599d0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d599e0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d599f0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d59a00 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d59a10 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d59a20 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d59a30 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d59a40 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d59a50 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d59a60 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d59a70 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d59a80 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d59a90 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00d59aa0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00d59ab0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00d59ac0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d59ad0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d59ae0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d59af0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d59b00 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d59b10 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d59b20 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d59b30 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d59b40 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d59b50 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d59b60 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d59b70 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d59b80 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d59b90 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d59ba0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d59bb0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d59bc0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d59bd0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d59be0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d59bf0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d59c00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d59c10 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d59c20 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d59c30 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d59c40 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d59c50 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d59c60 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d59c70 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d59c80 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d59c90 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d59ca0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d59cb0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d59cc0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d59cd0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d59ce0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d59cf0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d59d00 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d59d10 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d59d20 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d59d30 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d59d40 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d59d50 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d59d60 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d59d70 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d59d80 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d59d90 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d59da0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d59db0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d59dc0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d59dd0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d59de0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d59df0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d59e00 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d59e10 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d59e20 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d59e30 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d59e40 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d59e50 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d59e60 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d59e70 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d59e80 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d59e90 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d59ea0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d59eb0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d59ec0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d59ed0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d59ee0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d59ef0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d59f00 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d59f10 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d59f20 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d59f30 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d59f40 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d59f50 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d59f60 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d59f70 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d59f80 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d59f90 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d59fa0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d59fb0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d59fc0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d59fd0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d59fe0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d59ff0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d5a000 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d5a010 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d5a020 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d5a030 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d5a040 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d5a050 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d5a060 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00d5a070 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00d5a080 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00d5a090 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00d5a0a0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00d5a0b0 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ - 0x00d5a0c0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d5a0d0 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ - 0x00d5a0e0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d5a0f0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d5a100 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ - 0x00d5a110 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ - 0x00d5a120 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ - 0x00d5a130 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00d5a140 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ - 0x00d5a150 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ - 0x00d5a160 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d5a170 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ - 0x00d5a180 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d5a190 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d5a1a0 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ - 0x00d5a1b0 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ - 0x00d5a1c0 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ - 0x00d5a1d0 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ - 0x00d5a1e0 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ - 0x00d5a1f0 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ - 0x00d5a200 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d5a210 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d5a220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5a230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5a240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5a250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5a260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5a270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5a280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5a290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5a2a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5a2b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5a2c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5a2d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5a2e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5a2f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5a300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5a310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5a320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5a330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5a340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5a350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5a360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5a370 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d5a380 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ - 0x00d5a390 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d5a3a0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00d5a3b0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ - 0x00d5a3c0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d5a3d0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d5a3e0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d5a3f0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d5a400 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d5a410 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d5a420 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d5a430 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d5a440 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d5a450 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d5a460 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d5a470 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d5a480 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d5a490 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d5a4a0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d5a4b0 200a2020 756e6966 6f726d20 73616d70 . uniform samp │ │ │ │ - 0x00d5a4c0 6c657232 4420755f 636f6c6f 72546578 ler2D u_colorTex │ │ │ │ - 0x00d5a4d0 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ - 0x00d5a4e0 706c6572 32442075 5f6d6173 6b546578 pler2D u_maskTex │ │ │ │ - 0x00d5a4f0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d5a500 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d5a510 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d5a520 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d5a530 200a2020 20207665 63342063 6f6c6f72 . vec4 color │ │ │ │ - 0x00d5a540 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ - 0x00d5a550 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ - 0x00d5a560 78436f6f 7264293b 200a2020 2020666c xCoord); . fl │ │ │ │ - 0x00d5a570 6f617420 6d61736b 203d2074 65787475 oat mask = textu │ │ │ │ - 0x00d5a580 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ - 0x00d5a590 6d61736b 54657843 6f6f7264 292e723b maskTexCoord).r; │ │ │ │ - 0x00d5a5a0 200a2020 2020636f 6c6f722e 61203d20 . color.a = │ │ │ │ - 0x00d5a5b0 636f6c6f 722e6120 2a206d61 736b202a color.a * mask * │ │ │ │ - 0x00d5a5c0 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ - 0x00d5a5d0 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ - 0x00d5a5e0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d5a5f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d5a600 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5a610 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5a620 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5a630 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5a640 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5a650 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5a660 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5a670 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5a680 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5a690 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5a6a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5a6b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5a6c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5a6d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5a6e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5a6f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5a700 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5a710 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5a720 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5a730 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5a740 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5a750 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d5a760 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d5a770 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d5a780 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d5a790 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ - 0x00d5a7a0 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ - 0x00d5a7b0 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00d5a7c0 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ - 0x00d5a7d0 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ - 0x00d5a7e0 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ - 0x00d5a7f0 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d5a800 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d5a810 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d5a820 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d5a830 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d5a840 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d5a850 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ - 0x00d5a860 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d5a870 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00d5a880 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d5a890 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ - 0x00d5a8a0 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ - 0x00d5a8b0 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ - 0x00d5a8c0 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ - 0x00d5a8d0 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ - 0x00d5a8e0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d5a8f0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d5a900 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ - 0x00d5a910 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d5a920 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d5a930 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d5a940 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d5a950 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ - 0x00d5a960 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d5a970 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ - 0x00d5a980 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ - 0x00d5a990 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d5a9a0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d5a9b0 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ - 0x00d5a9c0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d5a9d0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d5a9e0 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ - 0x00d5a9f0 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ - 0x00d5aa00 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d5aa10 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ - 0x00d5aa20 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ - 0x00d5aa30 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ - 0x00d5aa40 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ - 0x00d5aa50 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ - 0x00d5aa60 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d5aa70 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ - 0x00d5aa80 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ - 0x00d5aa90 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d5aaa0 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ - 0x00d5aab0 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ - 0x00d5aac0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d5aad0 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ - 0x00d5aae0 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ - 0x00d5aaf0 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ - 0x00d5ab00 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ - 0x00d5ab10 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d5ab20 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d5ab30 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d5ab40 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ - 0x00d5ab50 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ - 0x00d5ab60 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ - 0x00d5ab70 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ - 0x00d5ab80 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d5ab90 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ - 0x00d5aba0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d5abb0 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ - 0x00d5abc0 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ - 0x00d5abd0 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ - 0x00d5abe0 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ - 0x00d5abf0 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ - 0x00d5ac00 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ - 0x00d5ac10 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ - 0x00d5ac20 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ - 0x00d5ac30 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ - 0x00d5ac40 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d5ac50 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ - 0x00d5ac60 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ - 0x00d5ac70 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ - 0x00d5ac80 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00d5ac90 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d5aca0 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ - 0x00d5acb0 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ - 0x00d5acc0 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ - 0x00d5acd0 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ - 0x00d5ace0 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ - 0x00d5acf0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d5ad00 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ - 0x00d5ad10 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ - 0x00d5ad20 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00d5ad30 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ - 0x00d5ad40 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ - 0x00d5ad50 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ - 0x00d5ad60 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ - 0x00d5ad70 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ - 0x00d5ad80 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d5ad90 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ - 0x00d5ada0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00d5adb0 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ - 0x00d5adc0 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ - 0x00d5add0 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ - 0x00d5ade0 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ - 0x00d5adf0 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ - 0x00d5ae00 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d5ae10 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ - 0x00d5ae20 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ - 0x00d5ae30 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ - 0x00d5ae40 7365200a 20202020 20207265 7475726e se . return │ │ │ │ - 0x00d5ae50 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d5ae60 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00d5ae70 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00d5ae80 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ - 0x00d5ae90 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ - 0x00d5aea0 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ - 0x00d5aeb0 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ - 0x00d5aec0 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00d5aed0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d5aee0 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00d5aef0 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00d5af00 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00d5af10 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ - 0x00d5af20 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ - 0x00d5af30 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ - 0x00d5af40 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d5af50 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d5af60 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00d5af70 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d5af80 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00d5af90 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ - 0x00d5afa0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d5afb0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d5afc0 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00d5afd0 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ - 0x00d5afe0 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ - 0x00d5aff0 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ - 0x00d5b000 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ - 0x00d5b010 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ - 0x00d5b020 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ - 0x00d5b030 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ - 0x00d5b040 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ - 0x00d5b050 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ - 0x00d5b060 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00d5b070 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00d5b080 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ - 0x00d5b090 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ - 0x00d5b0a0 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ - 0x00d5b0b0 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ - 0x00d5b0c0 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ - 0x00d5b0d0 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ - 0x00d5b0e0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00d5b0f0 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00d5b100 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00d5b110 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00d5b120 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d5b130 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d5b140 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d5b150 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d5b160 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d5b170 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d5b180 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5b190 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5b1a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5b1b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5b1c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5b1d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5b1e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5b1f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5b200 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5b210 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5b220 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5b230 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5b240 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5b250 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5b260 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5b270 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5b280 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5b290 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5b2a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5b2b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5b2c0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ - 0x00d5b2d0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00d5b2e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d5b2f0 20755f63 6f6c6f72 3b200a20 20636f6e u_color; . con │ │ │ │ - 0x00d5b300 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d5b310 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d5b320 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d5b330 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ - 0x00d5b340 46726167 436f6c6f 72203d20 755f636f FragColor = u_co │ │ │ │ - 0x00d5b350 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00d5b360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5b370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5b380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5b390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5b3a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5b3b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5b3c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5b3d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5b3e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5b3f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5b400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5b410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5b420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5b430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5b440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5b450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5b460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5b470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5b480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5b490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5b4a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5b4b0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d5b4c0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00d5b4d0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00d5b4e0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00d5b4f0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00d5b500 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d5b510 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d5b520 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d5b530 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00d5b540 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d5b550 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d5b560 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00d5b570 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d5b580 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00d5b590 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00d5b5a0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00d5b5b0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00d5b5c0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00d5b5d0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00d5b5e0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d5b5f0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00d5b600 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00d5b610 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00d5b620 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00d5b630 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00d5b640 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00d5b650 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00d5b660 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00d5b670 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5b680 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00d5b690 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00d5b6a0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d5b6b0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00d5b6c0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00d5b6d0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00d5b6e0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00d5b6f0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d5b700 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d5b710 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d5b720 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00d5b730 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00d5b740 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00d5b750 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00d5b760 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d5b770 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d5b780 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d5b790 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00d5b7a0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00d5b7b0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00d5b7c0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00d5b7d0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00d5b7e0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00d5b7f0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d5b800 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00d5b810 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00d5b820 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5b830 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00d5b840 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00d5b850 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00d5b860 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00d5b870 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d5b880 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00d5b890 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00d5b8a0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00d5b8b0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00d5b8c0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00d5b8d0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d5b8e0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00d5b8f0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00d5b900 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00d5b910 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00d5b920 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00d5b930 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00d5b940 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00d5b950 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00d5b960 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00d5b970 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00d5b980 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00d5b990 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00d5b9a0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00d5b9b0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00d5b9c0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00d5b9d0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00d5b9e0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d5b9f0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00d5ba00 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00d5ba10 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00d5ba20 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00d5ba30 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d5ba40 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00d5ba50 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d5ba60 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d5ba70 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ - 0x00d5ba80 20302c20 31293b20 0a202023 69666465 0, 1); . #ifde │ │ │ │ - 0x00d5ba90 66205655 4c4b414e 200a2020 2020676c f VULKAN . gl │ │ │ │ - 0x00d5baa0 5f506f73 6974696f 6e2e7920 3d202d67 _Position.y = -g │ │ │ │ - 0x00d5bab0 6c5f506f 73697469 6f6e2e79 3b200a20 l_Position.y; . │ │ │ │ - 0x00d5bac0 20202067 6c5f506f 73697469 6f6e2e7a gl_Position.z │ │ │ │ - 0x00d5bad0 203d2028 676c5f50 6f736974 696f6e2e = (gl_Position. │ │ │ │ - 0x00d5bae0 7a20202b 20676c5f 506f7369 74696f6e z + gl_Position │ │ │ │ - 0x00d5baf0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ - 0x00d5bb00 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ - 0x00d5bb10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d5bb20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5bb30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5bb40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5bb50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5bb60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5bb70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5bb80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5bb90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5bba0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5bbb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5bbc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5bbd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5bbe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5bbf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5bc00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5bc10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5bc20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5bc30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5bc40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5bc50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5bc60 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d5bc70 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d5bc80 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d5bc90 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d5bca0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d5bcb0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d5bcc0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d5bcd0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d5bce0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5bcf0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00d5bd00 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00d5bd10 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00d5bd20 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d5bd30 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d5bd40 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d5bd50 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d5bd60 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d5bd70 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d5bd80 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d5bd90 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d5bda0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00d5bdb0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00d5bdc0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00d5bdd0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d5bde0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00d5bdf0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00d5be00 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00d5be10 50617373 3b200a20 20756e69 666f726d Pass; . uniform │ │ │ │ - 0x00d5be20 2073616d 706c6572 32442075 5f6d6173 sampler2D u_mas │ │ │ │ - 0x00d5be30 6b546578 3b200a20 20636f6e 73742066 kTex; . const f │ │ │ │ - 0x00d5be40 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d5be50 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d5be60 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00d5be70 0a20207b 200a2020 23696664 65662045 . { . #ifdef E │ │ │ │ - 0x00d5be80 4e41424c 455f5654 46200a20 2020204c NABLE_VTF . L │ │ │ │ - 0x00d5be90 4f575f50 20766563 3420636f 6c6f7220 OW_P vec4 color │ │ │ │ - 0x00d5bea0 3d20765f 636f6c6f 723b200a 20202365 = v_color; . #e │ │ │ │ - 0x00d5beb0 6c736520 0a202020 204c4f57 5f502076 lse . LOW_P v │ │ │ │ - 0x00d5bec0 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ - 0x00d5bed0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d5bee0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d5bef0 293b200a 20202365 6e646966 200a2020 ); . #endif . │ │ │ │ - 0x00d5bf00 2020636f 6c6f7220 2a3d2074 65787475 color *= textu │ │ │ │ - 0x00d5bf10 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ - 0x00d5bf20 6d61736b 54657843 6f6f7264 73293b20 maskTexCoords); │ │ │ │ - 0x00d5bf30 0a202020 20636f6c 6f722e61 202a3d20 . color.a *= │ │ │ │ - 0x00d5bf40 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ - 0x00d5bf50 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ - 0x00d5bf60 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00d5bf70 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d5bf80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5bf90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5bfa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5bfb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5bfc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5bfd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5bfe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5bff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5c000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5c010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5c020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5c030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5c040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5c050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5c060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5c070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5c080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5c090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5c0a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5c0b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5c0c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5c0d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d5c0e0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d5c0f0 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ - 0x00d5c100 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ - 0x00d5c110 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ - 0x00d5c120 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d5c130 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ - 0x00d5c140 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ - 0x00d5c150 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d5c160 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d5c170 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ - 0x00d5c180 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ - 0x00d5c190 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00d5c1a0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00d5c1b0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00d5c1c0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00d5c1d0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d5c1e0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d5c1f0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00d5c200 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00d5c210 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00d5c220 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d5c230 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d5c240 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00d5c250 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00d5c260 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00d5c270 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d5c280 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00d5c290 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ - 0x00d5c2a0 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ - 0x00d5c2b0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ - 0x00d5c2c0 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ - 0x00d5c2d0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00d5c2e0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00d5c2f0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00d5c300 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00d5c310 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d5c320 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d5c330 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d5c340 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00d5c350 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d5c360 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d5c370 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00d5c380 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d5c390 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00d5c3a0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00d5c3b0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00d5c3c0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00d5c3d0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00d5c3e0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00d5c3f0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d5c400 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00d5c410 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00d5c420 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00d5c430 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00d5c440 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00d5c450 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00d5c460 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00d5c470 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00d5c480 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5c490 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00d5c4a0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00d5c4b0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d5c4c0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00d5c4d0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00d5c4e0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00d5c4f0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00d5c500 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d5c510 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d5c520 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d5c530 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00d5c540 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00d5c550 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00d5c560 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00d5c570 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d5c580 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d5c590 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d5c5a0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00d5c5b0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00d5c5c0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00d5c5d0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00d5c5e0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00d5c5f0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00d5c600 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d5c610 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00d5c620 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00d5c630 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5c640 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00d5c650 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00d5c660 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00d5c670 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00d5c680 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d5c690 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00d5c6a0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00d5c6b0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00d5c6c0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00d5c6d0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00d5c6e0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d5c6f0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00d5c700 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00d5c710 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00d5c720 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00d5c730 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00d5c740 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00d5c750 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00d5c760 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00d5c770 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00d5c780 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00d5c790 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00d5c7a0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00d5c7b0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00d5c7c0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00d5c7d0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00d5c7e0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00d5c7f0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d5c800 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00d5c810 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00d5c820 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00d5c830 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00d5c840 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d5c850 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00d5c860 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d5c870 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00d5c880 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00d5c890 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ - 0x00d5c8a0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d5c8b0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d5c8c0 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ - 0x00d5c8d0 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ - 0x00d5c8e0 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00d5c8f0 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00d5c900 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00d5c910 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00d5c920 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00d5c930 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ - 0x00d5c940 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ - 0x00d5c950 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00d5c960 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d5c970 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d5c980 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ - 0x00d5c990 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ - 0x00d5c9a0 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00d5c9b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d5c9c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5c9d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5c9e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5c9f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5ca00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5ca10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5ca20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5ca30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5ca40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5ca50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5ca60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5ca70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5ca80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5ca90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5caa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5cab0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5cac0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5cad0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5cae0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5caf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5cb00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5cb10 63322076 5f746578 436f6f72 64733b20 c2 v_texCoords; │ │ │ │ - 0x00d5cb20 0a202069 6e207665 63342076 5f636f6c . in vec4 v_col │ │ │ │ - 0x00d5cb30 6f723b20 0a20206f 75742076 65633420 or; . out vec4 │ │ │ │ - 0x00d5cb40 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00d5cb50 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d5cb60 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d5cb70 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d5cb80 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d5cb90 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ - 0x00d5cba0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d5cbb0 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ - 0x00d5cbc0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d5cbd0 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ - 0x00d5cbe0 6f726473 293b200a 20202020 765f4672 ords); . v_Fr │ │ │ │ - 0x00d5cbf0 6167436f 6c6f7220 3d20636f 6c6f7220 agColor = color │ │ │ │ - 0x00d5cc00 2a20765f 636f6c6f 723b200a 20207d20 * v_color; . } │ │ │ │ - 0x00d5cc10 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d5cc20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5cc30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5cc40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5cc50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5cc60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5cc70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5cc80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5cc90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5cca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5ccb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5ccc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5ccd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5cce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5ccf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5cd00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5cd10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5cd20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5cd30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5cd40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5cd50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5cd60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5cd70 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d5cd80 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00d5cd90 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ - 0x00d5cda0 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ - 0x00d5cdb0 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ - 0x00d5cdc0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00d5cdd0 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ - 0x00d5cde0 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ - 0x00d5cdf0 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ - 0x00d5ce00 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d5ce10 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d5ce20 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00d5ce30 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d5ce40 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d5ce50 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d5ce60 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00d5ce70 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d5ce80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5ce90 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00d5cea0 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00d5ceb0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00d5cec0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d5ced0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00d5cee0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d5cef0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5cf00 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d5cf10 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00d5cf20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d5cf30 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00d5cf40 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00d5cf50 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d5cf60 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d5cf70 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00d5cf80 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00d5cf90 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d5cfa0 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00d5cfb0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00d5cfc0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d5cfd0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00d5cfe0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00d5cff0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00d5d000 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00d5d010 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00d5d020 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00d5d030 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00d5d040 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00d5d050 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00d5d060 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00d5d070 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00d5d080 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00d5d090 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00d5d0a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d5d0b0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00d5d0c0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00d5d0d0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d5d0e0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00d5d0f0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00d5d100 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d5d110 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00d5d120 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00d5d130 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00d5d140 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d5d150 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00d5d160 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00d5d170 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00d5d180 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00d5d190 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00d5d1a0 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00d5d1b0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00d5d1c0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00d5d1d0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00d5d1e0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00d5d1f0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00d5d200 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d5d210 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d5d220 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00d5d230 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00d5d240 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00d5d250 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00d5d260 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00d5d270 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00d5d280 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00d5d290 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00d5d2a0 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00d5d2b0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00d5d2c0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00d5d2d0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00d5d2e0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00d5d2f0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d5d300 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00d5d310 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00d5d320 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d5d330 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00d5d340 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00d5d350 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00d5d360 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d5d370 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00d5d380 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00d5d390 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ - 0x00d5d3a0 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ - 0x00d5d3b0 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ - 0x00d5d3c0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00d5d3d0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d5d3e0 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ - 0x00d5d3f0 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ - 0x00d5d400 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00d5d410 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00d5d420 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00d5d430 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00d5d440 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d5d450 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00d5d460 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00d5d470 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00d5d480 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ - 0x00d5d490 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d5d4a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5d4b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5d4c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5d4d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5d4e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5d4f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5d500 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5d510 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5d520 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5d530 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5d540 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5d550 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5d560 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5d570 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5d580 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5d590 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5d5a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5d5b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5d5c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5d5d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5d5e0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d5d5f0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d5d600 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d5d610 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d5d620 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d5d630 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d5d640 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d5d650 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d5d660 23656e64 6966200a 20206f75 74207665 #endif . out ve │ │ │ │ - 0x00d5d670 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ - 0x00d5d680 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d5d690 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d5d6a0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d5d6b0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ - 0x00d5d6c0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ - 0x00d5d6d0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ - 0x00d5d6e0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ - 0x00d5d6f0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ - 0x00d5d700 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d5d710 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00d5d720 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ - 0x00d5d730 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ - 0x00d5d740 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ - 0x00d5d750 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ - 0x00d5d760 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00d5d770 696e6550 6173733b 200a2020 636f6e73 inePass; . cons │ │ │ │ - 0x00d5d780 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d5d790 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d5d7a0 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ - 0x00d5d7b0 2829200a 20207b20 0a202023 69666465 () . { . #ifde │ │ │ │ - 0x00d5d7c0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d5d7d0 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ - 0x00d5d7e0 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ - 0x00d5d7f0 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ - 0x00d5d800 50207665 63342063 6f6c6f72 203d2074 P vec4 color = t │ │ │ │ - 0x00d5d810 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00d5d820 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ - 0x00d5d830 7264293b 200a2020 23656e64 6966200a rd); . #endif . │ │ │ │ - 0x00d5d840 20202020 636f6c6f 722e6120 2a3d2075 color.a *= u │ │ │ │ - 0x00d5d850 5f6f7061 63697479 3b200a20 20202076 _opacity; . v │ │ │ │ - 0x00d5d860 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ - 0x00d5d870 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d5d880 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5d890 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5d8a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5d8b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5d8c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5d8d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5d8e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5d8f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5d900 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5d910 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5d920 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5d930 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5d940 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5d950 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5d960 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5d970 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5d980 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5d990 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5d9a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5d9b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5d9c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5d9d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d5d9e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d5d9f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d5da00 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d5da10 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d5da20 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ - 0x00d5da30 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ - 0x00d5da40 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ - 0x00d5da50 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ - 0x00d5da60 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00d5da70 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d5da80 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d5da90 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d5daa0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ - 0x00d5dab0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ - 0x00d5dac0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ - 0x00d5dad0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ - 0x00d5dae0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ - 0x00d5daf0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d5db00 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00d5db10 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ - 0x00d5db20 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ - 0x00d5db30 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ - 0x00d5db40 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ - 0x00d5db50 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00d5db60 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ - 0x00d5db70 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ - 0x00d5db80 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00d5db90 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00d5dba0 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ - 0x00d5dbb0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d5dbc0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d5dbd0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00d5dbe0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d5dbf0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d5dc00 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d5dc10 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d5dc20 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00d5dc30 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d5dc40 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00d5dc50 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00d5dc60 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00d5dc70 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d5dc80 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00d5dc90 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d5dca0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d5dcb0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d5dcc0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00d5dcd0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d5dce0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00d5dcf0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00d5dd00 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d5dd10 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d5dd20 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00d5dd30 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00d5dd40 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d5dd50 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00d5dd60 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00d5dd70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5dd80 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d5dd90 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d5dda0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d5ddb0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00d5ddc0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d5ddd0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d5dde0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d5ddf0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d5de00 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00d5de10 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00d5de20 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00d5de30 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00d5de40 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00d5de50 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d5de60 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00d5de70 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00d5de80 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d5de90 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00d5dea0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00d5deb0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d5dec0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00d5ded0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00d5dee0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00d5def0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d5df00 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00d5df10 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00d5df20 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00d5df30 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00d5df40 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00d5df50 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00d5df60 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00d5df70 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00d5df80 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00d5df90 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00d5dfa0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00d5dfb0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00d5dfc0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d5dfd0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00d5dfe0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00d5dff0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00d5e000 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00d5e010 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00d5e020 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00d5e030 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00d5e040 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00d5e050 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00d5e060 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00d5e070 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00d5e080 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d5e090 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00d5e0a0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d5e0b0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00d5e0c0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00d5e0d0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00d5e0e0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00d5e0f0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00d5e100 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00d5e110 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d5e120 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d5e130 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00d5e140 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d5e150 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ - 0x00d5e160 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ - 0x00d5e170 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ - 0x00d5e180 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ - 0x00d5e190 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ - 0x00d5e1a0 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ - 0x00d5e1b0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00d5e1c0 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00d5e1d0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d5e1e0 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ - 0x00d5e1f0 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ - 0x00d5e200 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ - 0x00d5e210 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ - 0x00d5e220 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00d5e230 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ - 0x00d5e240 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ - 0x00d5e250 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ - 0x00d5e260 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ - 0x00d5e270 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d5e280 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d5e290 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ - 0x00d5e2a0 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ - 0x00d5e2b0 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ - 0x00d5e2c0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d5e2d0 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ - 0x00d5e2e0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00d5e2f0 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ - 0x00d5e300 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00d5e310 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d5e320 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00d5e330 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00d5e340 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00d5e350 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d5e360 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ - 0x00d5e370 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ - 0x00d5e380 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00d5e390 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00d5e3a0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d5e3b0 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ - 0x00d5e3c0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00d5e3d0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d5e3e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5e3f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5e400 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5e410 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5e420 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5e430 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5e440 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5e450 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5e460 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5e470 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5e480 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5e490 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5e4a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5e4b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5e4c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5e4d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5e4e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5e4f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5e500 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5e510 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5e520 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5e530 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d5e540 7264733b 200a2020 696e2076 65633220 rds; . in vec2 │ │ │ │ - 0x00d5e550 765f6d61 736b5465 78436f6f 7264733b v_maskTexCoords; │ │ │ │ - 0x00d5e560 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d5e570 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d5e580 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d5e590 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d5e5a0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d5e5b0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d5e5c0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d5e5d0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d5e5e0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d5e5f0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d5e600 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d5e610 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d5e620 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d5e630 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d5e640 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d5e650 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d5e660 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d5e670 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ - 0x00d5e680 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ - 0x00d5e690 65783b20 0a202075 6e69666f 726d2073 ex; . uniform s │ │ │ │ - 0x00d5e6a0 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ - 0x00d5e6b0 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00d5e6c0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d5e6d0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d5e6e0 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ - 0x00d5e6f0 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ - 0x00d5e700 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ - 0x00d5e710 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d5e720 636f6c6f 72546578 436f6f72 64732920 colorTexCoords) │ │ │ │ - 0x00d5e730 2a207465 78747572 6528755f 6d61736b * texture(u_mask │ │ │ │ - 0x00d5e740 5465782c 20765f6d 61736b54 6578436f Tex, v_maskTexCo │ │ │ │ - 0x00d5e750 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ - 0x00d5e760 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ - 0x00d5e770 61636974 793b200a 20202020 765f4672 acity; . v_Fr │ │ │ │ - 0x00d5e780 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d5e790 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d5e7a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5e7b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5e7c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5e7d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5e7e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5e7f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5e800 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5e810 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5e820 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5e830 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5e840 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5e850 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5e860 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5e870 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5e880 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5e890 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5e8a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5e8b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5e8c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5e8d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5e8e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5e8f0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d5e900 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d5e910 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d5e920 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d5e930 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00d5e940 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00d5e950 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00d5e960 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00d5e970 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d5e980 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d5e990 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d5e9a0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d5e9b0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d5e9c0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d5e9d0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d5e9e0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d5e9f0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d5ea00 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d5ea10 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d5ea20 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d5ea30 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d5ea40 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d5ea50 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d5ea60 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d5ea70 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d5ea80 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d5ea90 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d5eaa0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d5eab0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d5eac0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d5ead0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d5eae0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d5eaf0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d5eb00 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d5eb10 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d5eb20 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d5eb30 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d5eb40 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d5eb50 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d5eb60 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d5eb70 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d5eb80 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d5eb90 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d5eba0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d5ebb0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d5ebc0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d5ebd0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d5ebe0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d5ebf0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d5ec00 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d5ec10 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d5ec20 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d5ec30 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d5ec40 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d5ec50 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d5ec60 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d5ec70 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d5ec80 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d5ec90 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d5eca0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d5ecb0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d5ecc0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d5ecd0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d5ece0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d5ecf0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d5ed00 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d5ed10 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d5ed20 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d5ed30 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d5ed40 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d5ed50 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d5ed60 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d5ed70 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d5ed80 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d5ed90 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d5eda0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d5edb0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d5edc0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d5edd0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d5ede0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d5edf0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d5ee00 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d5ee10 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d5ee20 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d5ee30 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d5ee40 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d5ee50 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d5ee60 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d5ee70 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d5ee80 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d5ee90 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d5eea0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d5eeb0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d5eec0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d5eed0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d5eee0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d5eef0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d5ef00 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d5ef10 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d5ef20 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d5ef30 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d5ef40 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d5ef50 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d5ef60 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d5ef70 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d5ef80 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d5ef90 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d5efa0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d5efb0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d5efc0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d5efd0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d5efe0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d5eff0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d5f000 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d5f010 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d5f020 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00d5f030 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ - 0x00d5f040 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ - 0x00d5f050 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ - 0x00d5f060 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ - 0x00d5f070 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ - 0x00d5f080 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00d5f090 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00d5f0a0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d5f0b0 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ - 0x00d5f0c0 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ - 0x00d5f0d0 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00d5f0e0 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00d5f0f0 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00d5f100 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d5f110 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00d5f120 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00d5f130 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00d5f140 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5f150 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5f160 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5f170 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5f180 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5f190 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5f1a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5f1b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5f1c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5f1d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5f1e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5f1f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5f200 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5f210 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5f220 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5f230 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5f240 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5f250 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5f260 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5f270 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5f280 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5f290 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d5f2a0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d5f2b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d5f2c0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d5f2d0 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00d5f2e0 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00d5f2f0 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00d5f300 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00d5f310 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d5f320 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d5f330 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d5f340 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d5f350 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d5f360 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d5f370 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d5f380 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d5f390 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d5f3a0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d5f3b0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d5f3c0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d5f3d0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d5f3e0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d5f3f0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d5f400 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d5f410 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d5f420 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d5f430 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d5f440 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d5f450 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d5f460 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d5f470 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d5f480 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d5f490 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d5f4a0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d5f4b0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d5f4c0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d5f4d0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d5f4e0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d5f4f0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d5f500 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d5f510 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d5f520 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d5f530 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d5f540 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d5f550 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d5f560 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d5f570 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d5f580 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d5f590 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d5f5a0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d5f5b0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d5f5c0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d5f5d0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d5f5e0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d5f5f0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d5f600 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d5f610 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d5f620 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d5f630 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d5f640 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d5f650 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d5f660 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d5f670 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d5f680 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d5f690 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d5f6a0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d5f6b0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d5f6c0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d5f6d0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d5f6e0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d5f6f0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d5f700 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d5f710 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d5f720 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d5f730 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d5f740 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d5f750 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d5f760 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d5f770 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d5f780 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d5f790 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d5f7a0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d5f7b0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d5f7c0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d5f7d0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d5f7e0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d5f7f0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d5f800 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d5f810 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d5f820 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d5f830 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d5f840 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d5f850 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d5f860 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d5f870 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d5f880 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d5f890 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d5f8a0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d5f8b0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d5f8c0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d5f8d0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d5f8e0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d5f8f0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d5f900 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d5f910 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d5f920 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d5f930 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d5f940 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d5f950 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d5f960 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d5f970 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d5f980 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d5f990 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d5f9a0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d5f9b0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d5f9c0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00d5f9d0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00d5f9e0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00d5f9f0 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00d5fa00 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00d5fa10 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00d5fa20 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d5fa30 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00d5fa40 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00d5fa50 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d5fa60 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00d5fa70 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d5fa80 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00d5fa90 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d5faa0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d5fab0 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00d5fac0 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00d5fad0 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00d5fae0 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00d5faf0 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00d5fb00 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d5fb10 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00d5fb20 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00d5fb30 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00d5fb40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d5fb50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d5fb60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d5fb70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d5fb80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d5fb90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d5fba0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d5fbb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d5fbc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d5fbd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d5fbe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d5fbf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d5fc00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d5fc10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d5fc20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d5fc30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d5fc40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d5fc50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d5fc60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d5fc70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d5fc80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d5fc90 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00d5fca0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00d5fcb0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00d5fcc0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00d5fcd0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d5fce0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d5fcf0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d5fd00 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d5fd10 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d5fd20 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d5fd30 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d5fd40 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00d5fd50 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d5fd60 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00d5fd70 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d5fd80 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00d5fd90 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00d5fda0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00d5fdb0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d5fdc0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00d5fdd0 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00d5fde0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d5fdf0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d5fe00 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d5fe10 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d5fe20 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d5fe30 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d5fe40 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d5fe50 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d5fe60 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d5fe70 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d5fe80 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d5fe90 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5fea0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d5feb0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d5fec0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d5fed0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d5fee0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d5fef0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d5ff00 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d5ff10 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d5ff20 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d5ff30 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d5ff40 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d5ff50 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d5ff60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d5ff70 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d5ff80 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d5ff90 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d5ffa0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d5ffb0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d5ffc0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d5ffd0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d5ffe0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d5fff0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d60000 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d60010 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d60020 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d60030 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d60040 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d60050 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d60060 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d60070 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d60080 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d60090 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d600a0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d600b0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d600c0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d600d0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d600e0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d600f0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d60100 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d60110 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d60120 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d60130 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d60140 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d60150 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d60160 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d60170 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d60180 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d60190 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d601a0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d601b0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d601c0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d601d0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d601e0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d601f0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d60200 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d60210 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d60220 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d60230 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d60240 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d60250 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d60260 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d60270 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d60280 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d60290 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d602a0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d602b0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d602c0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d602d0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d602e0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d602f0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d60300 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d60310 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d60320 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d60330 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d60340 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d60350 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d60360 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d60370 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d60380 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ - 0x00d60390 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ - 0x00d603a0 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ - 0x00d603b0 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ - 0x00d603c0 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ - 0x00d603d0 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ - 0x00d603e0 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ - 0x00d603f0 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ - 0x00d60400 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ - 0x00d60410 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ - 0x00d60420 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ - 0x00d60430 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ - 0x00d60440 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ - 0x00d60450 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ - 0x00d60460 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ - 0x00d60470 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00d60480 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d60490 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ - 0x00d604a0 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ - 0x00d604b0 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ - 0x00d604c0 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ - 0x00d604d0 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ - 0x00d604e0 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ - 0x00d604f0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00d60500 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ - 0x00d60510 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ - 0x00d60520 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d60530 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d60540 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ - 0x00d60550 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ - 0x00d60560 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00d60570 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00d60580 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00d60590 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d605a0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d605b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d605c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d605d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d605e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d605f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d60600 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d60610 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d60620 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d60630 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d60640 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d60650 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d60660 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d60670 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d60680 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d60690 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d606a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d606b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d606c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d606d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d606e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d606f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d60700 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d60710 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d60720 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d60730 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d60740 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d60750 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d60760 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d60770 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d60780 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d60790 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d607a0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d607b0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d607c0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d607d0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d607e0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d607f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d60800 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d60810 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d60820 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d60830 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d60840 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d60850 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d60860 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d60870 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d60880 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d60890 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d608a0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d608b0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d608c0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d608d0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d608e0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d608f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d60900 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d60910 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d60920 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d60930 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d60940 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d60950 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d60960 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d60970 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d60980 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d60990 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d609a0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d609b0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d609c0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d609d0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d609e0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d609f0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d60a00 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d60a10 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d60a20 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d60a30 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d60a40 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d60a50 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d60a60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d60a70 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d60a80 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d60a90 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d60aa0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d60ab0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d60ac0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d60ad0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d60ae0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d60af0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d60b00 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d60b10 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d60b20 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d60b30 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d60b40 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d60b50 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d60b60 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d60b70 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d60b80 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d60b90 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d60ba0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d60bb0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d60bc0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d60bd0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d60be0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d60bf0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d60c00 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d60c10 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d60c20 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d60c30 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d60c40 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d60c50 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d60c60 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d60c70 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d60c80 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d60c90 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d60ca0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d60cb0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d60cc0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d60cd0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d60ce0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d60cf0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d60d00 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d60d10 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d60d20 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d60d30 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d60d40 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d60d50 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d60d60 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d60d70 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d60d80 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d60d90 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d60da0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d60db0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d60dc0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d60dd0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d60de0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d60df0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d60e00 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d60e10 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00d60e20 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00d60e30 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d60e40 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ - 0x00d60e50 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ - 0x00d60e60 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ - 0x00d60e70 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ - 0x00d60e80 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ - 0x00d60e90 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ - 0x00d60ea0 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ - 0x00d60eb0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00d60ec0 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ - 0x00d60ed0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00d60ee0 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ - 0x00d60ef0 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ - 0x00d60f00 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ - 0x00d60f10 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ - 0x00d60f20 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ - 0x00d60f30 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ - 0x00d60f40 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ - 0x00d60f50 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d60f60 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00d60f70 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ - 0x00d60f80 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ - 0x00d60f90 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d60fa0 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ - 0x00d60fb0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d60fc0 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ - 0x00d60fd0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00d60fe0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d60ff0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d61000 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d61010 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d61020 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d61030 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d61040 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d61050 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d61060 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d61070 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d61080 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d61090 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d610a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d610b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d610c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d610d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d610e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d610f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d61100 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d61110 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d61120 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d61130 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00d61140 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00d61150 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00d61160 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00d61170 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d61180 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d61190 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d611a0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d611b0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d611c0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d611d0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d611e0 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00d611f0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d61200 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00d61210 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d61220 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00d61230 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00d61240 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00d61250 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d61260 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00d61270 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00d61280 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d61290 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d612a0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d612b0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d612c0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d612d0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d612e0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d612f0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d61300 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d61310 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d61320 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d61330 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d61340 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d61350 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d61360 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d61370 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d61380 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d61390 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d613a0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d613b0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d613c0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d613d0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d613e0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d613f0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d61400 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d61410 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d61420 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d61430 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d61440 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d61450 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d61460 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d61470 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d61480 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d61490 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d614a0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d614b0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d614c0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d614d0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d614e0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d614f0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d61500 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d61510 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d61520 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d61530 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d61540 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d61550 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d61560 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d61570 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d61580 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d61590 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d615a0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d615b0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d615c0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d615d0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d615e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d615f0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d61600 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d61610 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d61620 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d61630 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d61640 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d61650 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d61660 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d61670 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d61680 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d61690 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d616a0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d616b0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d616c0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d616d0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d616e0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d616f0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d61700 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d61710 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d61720 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d61730 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d61740 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d61750 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d61760 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d61770 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d61780 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d61790 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d617a0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d617b0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d617c0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d617d0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d617e0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d617f0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d61800 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d61810 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d61820 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d61830 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00d61840 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00d61850 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00d61860 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ - 0x00d61870 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ - 0x00d61880 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ - 0x00d61890 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ - 0x00d618a0 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ - 0x00d618b0 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ - 0x00d618c0 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00d618d0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00d618e0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d618f0 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ - 0x00d61900 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ - 0x00d61910 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00d61920 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ - 0x00d61930 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ - 0x00d61940 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00d61950 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00d61960 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d61970 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d61980 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d61990 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d619a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d619b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d619c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d619d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d619e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d619f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d61a00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d61a10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d61a20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d61a30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d61a40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d61a50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d61a60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d61a70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d61a80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d61a90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d61aa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d61ab0 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ - 0x00d61ac0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d61ad0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d61ae0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d61af0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d61b00 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d61b10 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d61b20 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d61b30 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d61b40 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d61b50 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00d61b60 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d61b70 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d61b80 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d61b90 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00d61ba0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00d61bb0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00d61bc0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00d61bd0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00d61be0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00d61bf0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00d61c00 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00d61c10 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00d61c20 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00d61c30 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00d61c40 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00d61c50 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00d61c60 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00d61c70 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00d61c80 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d61c90 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00d61ca0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00d61cb0 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ - 0x00d61cc0 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ - 0x00d61cd0 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ - 0x00d61ce0 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ - 0x00d61cf0 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ - 0x00d61d00 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ - 0x00d61d10 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ - 0x00d61d20 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d61d30 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d61d40 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d61d50 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ - 0x00d61d60 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ - 0x00d61d70 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ - 0x00d61d80 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ - 0x00d61d90 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ - 0x00d61da0 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ - 0x00d61db0 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ - 0x00d61dc0 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ - 0x00d61dd0 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ - 0x00d61de0 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ - 0x00d61df0 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ - 0x00d61e00 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ - 0x00d61e10 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ - 0x00d61e20 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ - 0x00d61e30 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ - 0x00d61e40 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ - 0x00d61e50 76656334 206d6169 6e4f7574 6c696e65 vec4 mainOutline │ │ │ │ - 0x00d61e60 436f6c6f 72203d20 6d697828 755f6f75 Color = mix(u_ou │ │ │ │ - 0x00d61e70 746c696e 65436f6c 6f722c20 755f6661 tlineColor, u_fa │ │ │ │ - 0x00d61e80 6b654f75 746c696e 65436f6c 6f722c20 keOutlineColor, │ │ │ │ - 0x00d61e90 636f6566 732e7829 3b200a20 2020206d coefs.x); . m │ │ │ │ - 0x00d61ea0 61696e4f 75746c69 6e65436f 6c6f7220 ainOutlineColor │ │ │ │ - 0x00d61eb0 3d206d69 78286d61 696e4f75 746c696e = mix(mainOutlin │ │ │ │ - 0x00d61ec0 65436f6c 6f722c20 755f6661 6b654f75 eColor, u_fakeOu │ │ │ │ - 0x00d61ed0 746c696e 65436f6c 6f722c20 636f6566 tlineColor, coef │ │ │ │ - 0x00d61ee0 732e7929 3b200a20 20202076 65633420 s.y); . vec4 │ │ │ │ - 0x00d61ef0 636f6c6f 72203d20 6d697828 6d697828 color = mix(mix( │ │ │ │ - 0x00d61f00 6d61696e 436f6c6f 722c2076 65633428 mainColor, vec4( │ │ │ │ - 0x00d61f10 765f636f 6c6f722e 7267622c 20312e30 v_color.rgb, 1.0 │ │ │ │ - 0x00d61f20 292c2076 5f636f6c 6f722e61 292c206d ), v_color.a), m │ │ │ │ - 0x00d61f30 61696e43 6f6c6f72 2c207374 65702875 ainColor, step(u │ │ │ │ - 0x00d61f40 5f726f75 74655061 72616d73 2e772c20 _routeParams.w, │ │ │ │ - 0x00d61f50 302e3029 293b200a 20202020 636f6c6f 0.0)); . colo │ │ │ │ - 0x00d61f60 72203d20 6d697828 636f6c6f 722c206d r = mix(color, m │ │ │ │ - 0x00d61f70 61696e4f 75746c69 6e65436f 6c6f722c ainOutlineColor, │ │ │ │ - 0x00d61f80 20737465 70286b4f 75746c69 6e655468 step(kOutlineTh │ │ │ │ - 0x00d61f90 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ - 0x00d61fa0 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ - 0x00d61fb0 2020636f 6c6f7220 3d206d69 7828636f color = mix(co │ │ │ │ - 0x00d61fc0 6c6f722c 206d6169 6e4f7574 6c696e65 lor, mainOutline │ │ │ │ - 0x00d61fd0 436f6c6f 722c2073 6d6f6f74 68737465 Color, smoothste │ │ │ │ - 0x00d61fe0 70286b4f 75746c69 6e655468 72657368 p(kOutlineThresh │ │ │ │ - 0x00d61ff0 6f6c6432 2c206b4f 75746c69 6e655468 old2, kOutlineTh │ │ │ │ - 0x00d62000 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ - 0x00d62010 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ - 0x00d62020 2020636f 6c6f722e 61202a3d 2028312e color.a *= (1. │ │ │ │ - 0x00d62030 30202d20 736d6f6f 74687374 6570286b 0 - smoothstep(k │ │ │ │ - 0x00d62040 416e7469 616c6961 73696e67 54687265 AntialiasingThre │ │ │ │ - 0x00d62050 73686f6c 642c2031 2e302c20 61627328 shold, 1.0, abs( │ │ │ │ - 0x00d62060 765f6c65 6e677468 2e792929 293b200a v_length.y))); . │ │ │ │ - 0x00d62070 20202020 636f6c6f 72203d20 76656334 color = vec4 │ │ │ │ - 0x00d62080 286d6978 28636f6c 6f722e72 67622c20 (mix(color.rgb, │ │ │ │ - 0x00d62090 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ - 0x00d620a0 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ - 0x00d620b0 20636f6c 6f722e61 293b200a 20202020 color.a); . │ │ │ │ - 0x00d620c0 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ - 0x00d620d0 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00d620e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d620f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d62100 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d62110 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d62120 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d62130 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d62140 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d62150 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d62160 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d62170 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d62180 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d62190 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d621a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d621b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d621c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d621d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d621e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d621f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d62200 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d62210 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d62220 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d62230 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d62240 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d62250 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ - 0x00d62260 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ - 0x00d62270 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d62280 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ - 0x00d62290 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ - 0x00d622a0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00d622b0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d622c0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d622d0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d622e0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d622f0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d62300 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d62310 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ - 0x00d62320 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ - 0x00d62330 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ - 0x00d62340 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ - 0x00d62350 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ - 0x00d62360 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ - 0x00d62370 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ - 0x00d62380 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ - 0x00d62390 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d623a0 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ - 0x00d623b0 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ - 0x00d623c0 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ - 0x00d623d0 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ - 0x00d623e0 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ - 0x00d623f0 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ - 0x00d62400 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ - 0x00d62410 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ - 0x00d62420 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ - 0x00d62430 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ - 0x00d62440 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d62450 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00d62460 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d62470 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d62480 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d62490 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d624a0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d624b0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d624c0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d624d0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d624e0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d624f0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d62500 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d62510 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d62520 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d62530 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d62540 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d62550 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d62560 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d62570 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d62580 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d62590 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d625a0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d625b0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d625c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d625d0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d625e0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d625f0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d62600 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d62610 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d62620 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d62630 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d62640 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d62650 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d62660 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d62670 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d62680 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d62690 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d626a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d626b0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d626c0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d626d0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d626e0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d626f0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d62700 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d62710 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d62720 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d62730 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d62740 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d62750 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d62760 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d62770 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d62780 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d62790 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d627a0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d627b0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d627c0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d627d0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d627e0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d627f0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d62800 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d62810 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d62820 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d62830 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d62840 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d62850 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d62860 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d62870 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d62880 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d62890 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d628a0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d628b0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d628c0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d628d0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d628e0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d628f0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d62900 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d62910 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d62920 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d62930 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d62940 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d62950 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d62960 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d62970 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d62980 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d62990 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d629a0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d629b0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d629c0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d629d0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d629e0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d629f0 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00d62a00 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00d62a10 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00d62a20 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00d62a30 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00d62a40 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ - 0x00d62a50 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00d62a60 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ - 0x00d62a70 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ - 0x00d62a80 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ - 0x00d62a90 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ - 0x00d62aa0 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ - 0x00d62ab0 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ - 0x00d62ac0 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ - 0x00d62ad0 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ - 0x00d62ae0 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ - 0x00d62af0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d62b00 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ - 0x00d62b10 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ - 0x00d62b20 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ - 0x00d62b30 0a202020 20202020 20202020 20202020 . │ │ │ │ - 0x00d62b40 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d62b50 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d62b60 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ - 0x00d62b70 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ - 0x00d62b80 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ - 0x00d62b90 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ - 0x00d62ba0 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ - 0x00d62bb0 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ - 0x00d62bc0 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ - 0x00d62bd0 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ - 0x00d62be0 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ - 0x00d62bf0 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ - 0x00d62c00 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ - 0x00d62c10 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ - 0x00d62c20 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ - 0x00d62c30 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00d62c40 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00d62c50 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ - 0x00d62c60 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ - 0x00d62c70 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ - 0x00d62c80 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ - 0x00d62c90 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00d62ca0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d62cb0 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ - 0x00d62cc0 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00d62cd0 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00d62ce0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d62cf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d62d00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d62d10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d62d20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d62d30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d62d40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d62d50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d62d60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d62d70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d62d80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d62d90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d62da0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d62db0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d62dc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d62dd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d62de0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d62df0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d62e00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d62e10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d62e20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d62e30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d62e40 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d62e50 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d62e60 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d62e70 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d62e80 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d62e90 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d62ea0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d62eb0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d62ec0 69666f72 6d207665 63342075 5f726f75 iform vec4 u_rou │ │ │ │ - 0x00d62ed0 74655061 72616d73 3b200a20 20756e69 teParams; . uni │ │ │ │ - 0x00d62ee0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00d62ef0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d62f00 63342075 5f6d6173 6b436f6c 6f723b20 c4 u_maskColor; │ │ │ │ - 0x00d62f10 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d62f20 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00d62f30 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d62f40 755f6661 6b65436f 6c6f723b 200a2020 u_fakeColor; . │ │ │ │ - 0x00d62f50 756e6966 6f726d20 76656334 20755f66 uniform vec4 u_f │ │ │ │ - 0x00d62f60 616b654f 75746c69 6e65436f 6c6f723b akeOutlineColor; │ │ │ │ - 0x00d62f70 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d62f80 20755f66 616b6542 6f726465 72733b20 u_fakeBorders; │ │ │ │ - 0x00d62f90 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d62fa0 755f7061 74746572 6e3b200a 2020756e u_pattern; . un │ │ │ │ - 0x00d62fb0 69666f72 6d207665 63322075 5f616e67 iform vec2 u_ang │ │ │ │ - 0x00d62fc0 6c65436f 7353696e 3b200a20 20756e69 leCosSin; . uni │ │ │ │ - 0x00d62fd0 666f726d 20666c6f 61742075 5f617272 form float u_arr │ │ │ │ - 0x00d62fe0 6f774861 6c665769 6474683b 200a2020 owHalfWidth; . │ │ │ │ - 0x00d62ff0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d63000 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d63010 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00d63020 636f6c6f 72546578 3b200a20 20636f6e colorTex; . con │ │ │ │ - 0x00d63030 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d63040 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d63050 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d63060 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ - 0x00d63070 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ - 0x00d63080 74657874 75726528 755f636f 6c6f7254 texture(u_colorT │ │ │ │ - 0x00d63090 65782c20 765f636f 6c6f7254 6578436f ex, v_colorTexCo │ │ │ │ - 0x00d630a0 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ - 0x00d630b0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ - 0x00d630c0 61636974 793b200a 20202020 69662028 acity; . if ( │ │ │ │ - 0x00d630d0 66696e61 6c436f6c 6f722e61 203c2030 finalColor.a < 0 │ │ │ │ - 0x00d630e0 2e303129 200a2020 20202020 64697363 .01) . disc │ │ │ │ - 0x00d630f0 6172643b 200a2020 20206669 6e616c43 ard; . finalC │ │ │ │ - 0x00d63100 6f6c6f72 203d2076 65633428 6d697828 olor = vec4(mix( │ │ │ │ - 0x00d63110 66696e61 6c436f6c 6f722e72 67622c20 finalColor.rgb, │ │ │ │ - 0x00d63120 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ - 0x00d63130 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ - 0x00d63140 2066696e 616c436f 6c6f722e 61293b20 finalColor.a); │ │ │ │ - 0x00d63150 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ - 0x00d63160 203d2066 696e616c 436f6c6f 723b200a = finalColor; . │ │ │ │ - 0x00d63170 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00d63180 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d63190 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d631a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d631b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d631c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d631d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d631e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d631f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d63200 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d63210 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d63220 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d63230 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d63240 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d63250 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d63260 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d63270 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d63280 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d63290 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d632a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d632b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d632c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d632d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d632e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d632f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d63300 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d63310 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d63320 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d63330 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d63340 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d63350 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d63360 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d63370 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d63380 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d63390 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ - 0x00d633a0 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ - 0x00d633b0 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ - 0x00d633c0 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00d633d0 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ - 0x00d633e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d633f0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00d63400 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d63410 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ - 0x00d63420 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00d63430 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ - 0x00d63440 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d63450 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ - 0x00d63460 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d63470 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ - 0x00d63480 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ - 0x00d63490 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ - 0x00d634a0 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ - 0x00d634b0 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ - 0x00d634c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d634d0 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ - 0x00d634e0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d634f0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d63500 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d63510 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d63520 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d63530 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d63540 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d63550 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d63560 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d63570 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d63580 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d63590 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d635a0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d635b0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d635c0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d635d0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d635e0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d635f0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d63600 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d63610 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d63620 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d63630 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d63640 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d63650 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d63660 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d63670 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d63680 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d63690 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d636a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d636b0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d636c0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d636d0 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d636e0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d636f0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d63700 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d63710 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d63720 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d63730 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d63740 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d63750 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d63760 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d63770 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d63780 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d63790 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d637a0 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d637b0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d637c0 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d637d0 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d637e0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d637f0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d63800 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d63810 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d63820 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d63830 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d63840 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d63850 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d63860 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d63870 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d63880 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d63890 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d638a0 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d638b0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d638c0 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d638d0 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d638e0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d638f0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d63900 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d63910 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d63920 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d63930 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d63940 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d63950 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d63960 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d63970 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d63980 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d63990 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d639a0 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d639b0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d639c0 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d639d0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d639e0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d639f0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d63a00 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d63a10 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d63a20 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d63a30 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d63a40 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d63a50 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d63a60 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d63a70 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00d63a80 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00d63a90 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00d63aa0 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00d63ab0 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00d63ac0 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00d63ad0 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ - 0x00d63ae0 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ - 0x00d63af0 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ - 0x00d63b00 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ - 0x00d63b10 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ - 0x00d63b20 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ - 0x00d63b30 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00d63b40 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ - 0x00d63b50 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00d63b60 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00d63b70 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ - 0x00d63b80 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ - 0x00d63b90 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d63ba0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d63bb0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d63bc0 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ - 0x00d63bd0 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ - 0x00d63be0 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ - 0x00d63bf0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00d63c00 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d63c10 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00d63c20 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00d63c30 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00d63c40 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00d63c50 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d63c60 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d63c70 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d63c80 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d63c90 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d63ca0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d63cb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d63cc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d63cd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d63ce0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d63cf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d63d00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d63d10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d63d20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d63d30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d63d40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d63d50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d63d60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d63d70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d63d80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d63d90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d63da0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d63db0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d63dc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d63dd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d63de0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d63df0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d63e00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d63e10 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ - 0x00d63e20 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d63e30 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d63e40 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d63e50 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d63e60 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d63e70 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d63e80 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d63e90 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d63ea0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d63eb0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00d63ec0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d63ed0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d63ee0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d63ef0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00d63f00 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00d63f10 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00d63f20 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00d63f30 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00d63f40 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00d63f50 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00d63f60 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00d63f70 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00d63f80 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00d63f90 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00d63fa0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00d63fb0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00d63fc0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00d63fd0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00d63fe0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d63ff0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00d64000 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00d64010 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ - 0x00d64020 323b200a 2020666c 6f617420 616c7068 2; . float alph │ │ │ │ - 0x00d64030 6146726f 6d506174 7465726e 28666c6f aFromPattern(flo │ │ │ │ - 0x00d64040 61742063 75724c65 6e2c2066 6c6f6174 at curLen, float │ │ │ │ - 0x00d64050 20646173 684c656e 2c20666c 6f617420 dashLen, float │ │ │ │ - 0x00d64060 6761704c 656e2920 0a20207b 200a2020 gapLen) . { . │ │ │ │ - 0x00d64070 2020666c 6f617420 6c656e20 3d206461 float len = da │ │ │ │ - 0x00d64080 73684c65 6e202b20 6761704c 656e3b20 shLen + gapLen; │ │ │ │ - 0x00d64090 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ - 0x00d640a0 74203d20 66726163 74286375 724c656e t = fract(curLen │ │ │ │ - 0x00d640b0 202f206c 656e2920 2a206c65 6e3b200a / len) * len; . │ │ │ │ - 0x00d640c0 20202020 72657475 726e2073 74657028 return step( │ │ │ │ - 0x00d640d0 6f666673 65742c20 64617368 4c656e29 offset, dashLen) │ │ │ │ - 0x00d640e0 3b200a20 207d200a 2020636f 6e737420 ; . } . const │ │ │ │ - 0x00d640f0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d64100 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d64110 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d64120 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ - 0x00d64130 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ - 0x00d64140 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ - 0x00d64150 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ - 0x00d64160 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ - 0x00d64170 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ - 0x00d64180 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ - 0x00d64190 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ - 0x00d641a0 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ - 0x00d641b0 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ - 0x00d641c0 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ - 0x00d641d0 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ - 0x00d641e0 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ - 0x00d641f0 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ - 0x00d64200 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ - 0x00d64210 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ - 0x00d64220 76656334 20636f6c 6f72203d 206d6169 vec4 color = mai │ │ │ │ - 0x00d64230 6e436f6c 6f72202b 20765f63 6f6c6f72 nColor + v_color │ │ │ │ - 0x00d64240 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ - 0x00d64250 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ - 0x00d64260 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ - 0x00d64270 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ - 0x00d64280 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ - 0x00d64290 2929202a 200a2020 20202020 20202020 )) * . │ │ │ │ - 0x00d642a0 20202020 2020616c 70686146 726f6d50 alphaFromP │ │ │ │ - 0x00d642b0 61747465 726e2876 5f6c656e 6774682e attern(v_length. │ │ │ │ - 0x00d642c0 782c2075 5f706174 7465726e 2e782c20 x, u_pattern.x, │ │ │ │ - 0x00d642d0 755f7061 74746572 6e2e7929 3b200a20 u_pattern.y); . │ │ │ │ - 0x00d642e0 20202063 6f6c6f72 203d2076 65633428 color = vec4( │ │ │ │ - 0x00d642f0 6d697828 636f6c6f 722e7267 622c2075 mix(color.rgb, u │ │ │ │ - 0x00d64300 5f6d6173 6b436f6c 6f722e72 67622c20 _maskColor.rgb, │ │ │ │ - 0x00d64310 755f6d61 736b436f 6c6f722e 61292c20 u_maskColor.a), │ │ │ │ - 0x00d64320 636f6c6f 722e6129 3b200a20 20202076 color.a); . v │ │ │ │ - 0x00d64330 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ - 0x00d64340 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d64350 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d64360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d64370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d64380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d64390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d643a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d643b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d643c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d643d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d643e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d643f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d64400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d64410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d64420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d64430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d64440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d64450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d64460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d64470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d64480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d64490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d644a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d644b0 63342076 5f726164 6975733b 200a2020 c4 v_radius; . │ │ │ │ - 0x00d644c0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d644d0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d644e0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d644f0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d64500 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d64510 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d64520 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d64530 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d64540 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d64550 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00d64560 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d64570 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d64580 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d64590 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00d645a0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00d645b0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00d645c0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00d645d0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00d645e0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00d645f0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00d64600 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00d64610 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00d64620 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00d64630 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00d64640 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00d64650 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00d64660 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00d64670 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00d64680 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d64690 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00d646a0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00d646b0 67506978 656c7343 6f756e74 203d2032 gPixelsCount = 2 │ │ │ │ - 0x00d646c0 2e353b20 0a202063 6f6e7374 20666c6f .5; . const flo │ │ │ │ - 0x00d646d0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d646e0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d646f0 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ - 0x00d64700 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ - 0x00d64710 616c436f 6c6f7220 3d20765f 636f6c6f alColor = v_colo │ │ │ │ - 0x00d64720 723b200a 20202020 666c6f61 74206161 r; . float aa │ │ │ │ - 0x00d64730 52616469 7573203d 206d6178 28765f72 Radius = max(v_r │ │ │ │ - 0x00d64740 61646975 732e7a20 2d206b41 6e746961 adius.z - kAntia │ │ │ │ - 0x00d64750 6c696173 696e6750 6978656c 73436f75 liasingPixelsCou │ │ │ │ - 0x00d64760 6e742c20 302e3029 3b200a20 20202066 nt, 0.0); . f │ │ │ │ - 0x00d64770 6c6f6174 20737465 7056616c 7565203d loat stepValue = │ │ │ │ - 0x00d64780 20736d6f 6f746873 74657028 61615261 smoothstep(aaRa │ │ │ │ - 0x00d64790 64697573 202a2061 61526164 6975732c dius * aaRadius, │ │ │ │ - 0x00d647a0 20765f72 61646975 732e7a20 2a20765f v_radius.z * v_ │ │ │ │ - 0x00d647b0 72616469 75732e7a 2c200a20 20202020 radius.z, . │ │ │ │ - 0x00d647c0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d647d0 20202020 20202020 20202020 646f7428 dot( │ │ │ │ - 0x00d647e0 765f7261 64697573 2e78792c 20765f72 v_radius.xy, v_r │ │ │ │ - 0x00d647f0 61646975 732e7879 29293b20 0a202020 adius.xy)); . │ │ │ │ - 0x00d64800 2066696e 616c436f 6c6f722e 61203d20 finalColor.a = │ │ │ │ - 0x00d64810 66696e61 6c436f6c 6f722e61 202a2075 finalColor.a * u │ │ │ │ - 0x00d64820 5f6f7061 63697479 202a2028 312e3020 _opacity * (1.0 │ │ │ │ - 0x00d64830 2d207374 65705661 6c756529 3b200a20 - stepValue); . │ │ │ │ - 0x00d64840 20202069 66202866 696e616c 436f6c6f if (finalColo │ │ │ │ - 0x00d64850 722e6120 3c20302e 3031207c 7c20755f r.a < 0.01 || u_ │ │ │ │ - 0x00d64860 726f7574 65506172 616d732e 79203e20 routeParams.y > │ │ │ │ - 0x00d64870 765f7261 64697573 2e772920 0a202020 v_radius.w) . │ │ │ │ - 0x00d64880 20202064 69736361 72643b20 0a202020 discard; . │ │ │ │ - 0x00d64890 2066696e 616c436f 6c6f7220 3d207665 finalColor = ve │ │ │ │ - 0x00d648a0 6334286d 69782866 696e616c 436f6c6f c4(mix(finalColo │ │ │ │ - 0x00d648b0 722e7267 622c2075 5f6d6173 6b436f6c r.rgb, u_maskCol │ │ │ │ - 0x00d648c0 6f722e72 67622c20 755f6d61 736b436f or.rgb, u_maskCo │ │ │ │ - 0x00d648d0 6c6f722e 61292c20 66696e61 6c436f6c lor.a), finalCol │ │ │ │ - 0x00d648e0 6f722e61 293b200a 20202020 765f4672 or.a); . v_Fr │ │ │ │ - 0x00d648f0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d64900 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d64910 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d64920 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d64930 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d64940 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d64950 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d64960 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d64970 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d64980 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d64990 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d649a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d649b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d649c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d649d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d649e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d649f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d64a00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d64a10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d64a20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d64a30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d64a40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d64a50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d64a60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d64a70 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d64a80 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d64a90 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d64aa0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d64ab0 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ - 0x00d64ac0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00d64ad0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00d64ae0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d64af0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d64b00 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d64b10 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d64b20 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d64b30 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d64b40 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ - 0x00d64b50 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d64b60 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00d64b70 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ - 0x00d64b80 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d64b90 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ - 0x00d64ba0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d64bb0 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ - 0x00d64bc0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d64bd0 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ - 0x00d64be0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d64bf0 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ - 0x00d64c00 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ - 0x00d64c10 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ - 0x00d64c20 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d64c30 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ - 0x00d64c40 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d64c50 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ - 0x00d64c60 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d64c70 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00d64c80 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d64c90 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d64ca0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d64cb0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d64cc0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d64cd0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d64ce0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d64cf0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d64d00 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d64d10 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d64d20 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d64d30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d64d40 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d64d50 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d64d60 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d64d70 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d64d80 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d64d90 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d64da0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d64db0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d64dc0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d64dd0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d64de0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d64df0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d64e00 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d64e10 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d64e20 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d64e30 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d64e40 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d64e50 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d64e60 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d64e70 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d64e80 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d64e90 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d64ea0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d64eb0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d64ec0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d64ed0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d64ee0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d64ef0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d64f00 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d64f10 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d64f20 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d64f30 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d64f40 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d64f50 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d64f60 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d64f70 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d64f80 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d64f90 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d64fa0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d64fb0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d64fc0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d64fd0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d64fe0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d64ff0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d65000 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d65010 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d65020 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d65030 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d65040 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d65050 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d65060 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d65070 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d65080 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d65090 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d650a0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d650b0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d650c0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d650d0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d650e0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d650f0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d65100 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d65110 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d65120 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d65130 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d65140 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d65150 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d65160 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d65170 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d65180 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d65190 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d651a0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d651b0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d651c0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d651d0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d651e0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d651f0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d65200 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d65210 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d65220 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ - 0x00d65230 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ - 0x00d65240 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00d65250 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ - 0x00d65260 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ - 0x00d65270 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ - 0x00d65280 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ - 0x00d65290 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ - 0x00d652a0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d652b0 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ - 0x00d652c0 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ - 0x00d652d0 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ - 0x00d652e0 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ - 0x00d652f0 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ - 0x00d65300 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ - 0x00d65310 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ - 0x00d65320 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ - 0x00d65330 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00d65340 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ - 0x00d65350 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ - 0x00d65360 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ - 0x00d65370 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ - 0x00d65380 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ - 0x00d65390 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ - 0x00d653a0 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ - 0x00d653b0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00d653c0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00d653d0 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00d653e0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00d653f0 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00d65400 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d65410 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ - 0x00d65420 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ - 0x00d65430 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ - 0x00d65440 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d65450 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d65460 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d65470 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d65480 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d65490 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d654a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d654b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d654c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d654d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d654e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d654f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d65500 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d65510 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d65520 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d65530 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d65540 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d65550 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d65560 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d65570 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d65580 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d65590 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d655a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d655b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d655c0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d655d0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d655e0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d655f0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d65600 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d65610 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d65620 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ - 0x00d65630 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ - 0x00d65640 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ - 0x00d65650 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d65660 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d65670 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ - 0x00d65680 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d65690 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d656a0 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ - 0x00d656b0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00d656c0 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ - 0x00d656d0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d656e0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d656f0 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ - 0x00d65700 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d65710 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ - 0x00d65720 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ - 0x00d65730 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ - 0x00d65740 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ - 0x00d65750 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ - 0x00d65760 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ - 0x00d65770 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d65780 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d65790 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d657a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d657b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d657c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d657d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d657e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d657f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d65800 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d65810 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d65820 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d65830 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d65840 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d65850 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d65860 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d65870 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d65880 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d65890 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d658a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d658b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d658c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d658d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d658e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d658f0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d65900 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d65910 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d65920 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d65930 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d65940 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d65950 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d65960 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d65970 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d65980 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d65990 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d659a0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d659b0 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ - 0x00d659c0 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00d659d0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00d659e0 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ - 0x00d659f0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d65a00 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ - 0x00d65a10 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ - 0x00d65a20 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d65a30 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d65a40 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00d65a50 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00d65a60 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d65a70 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d65a80 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d65a90 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00d65aa0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d65ab0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d65ac0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00d65ad0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d65ae0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00d65af0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00d65b00 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00d65b10 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00d65b20 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00d65b30 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00d65b40 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d65b50 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00d65b60 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d65b70 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00d65b80 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00d65b90 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00d65ba0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00d65bb0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00d65bc0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00d65bd0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d65be0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00d65bf0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00d65c00 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d65c10 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00d65c20 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00d65c30 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00d65c40 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00d65c50 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d65c60 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d65c70 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d65c80 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00d65c90 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00d65ca0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00d65cb0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00d65cc0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d65cd0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d65ce0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d65cf0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00d65d00 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00d65d10 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00d65d20 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00d65d30 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00d65d40 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00d65d50 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00d65d60 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00d65d70 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00d65d80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d65d90 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00d65da0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00d65db0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00d65dc0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00d65dd0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d65de0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00d65df0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00d65e00 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00d65e10 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00d65e20 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00d65e30 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d65e40 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00d65e50 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00d65e60 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d65e70 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00d65e80 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d65e90 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00d65ea0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00d65eb0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00d65ec0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00d65ed0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00d65ee0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00d65ef0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00d65f00 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00d65f10 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00d65f20 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00d65f30 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00d65f40 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00d65f50 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00d65f60 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00d65f70 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00d65f80 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00d65f90 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d65fa0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00d65fb0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00d65fc0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00d65fd0 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00d65fe0 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ - 0x00d65ff0 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ - 0x00d66000 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ - 0x00d66010 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ - 0x00d66020 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d66030 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00d66040 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00d66050 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d66060 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00d66070 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ - 0x00d66080 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00d66090 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ - 0x00d660a0 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ - 0x00d660b0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d660c0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00d660d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d660e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d660f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d66100 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d66110 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d66120 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d66130 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d66140 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d66150 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d66160 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d66170 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d66180 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d66190 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d661a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d661b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d661c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d661d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d661e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d661f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d66200 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d66210 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d66220 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d66230 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d66240 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d66250 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d66260 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d66270 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00d66280 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00d66290 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ - 0x00d662a0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d662b0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d662c0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d662d0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d662e0 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ - 0x00d662f0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00d66300 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ - 0x00d66310 6f6f7264 73293b20 0a202020 2066696e oords); . fin │ │ │ │ - 0x00d66320 616c436f 6c6f722e 61202a3d 20755f6f alColor.a *= u_o │ │ │ │ - 0x00d66330 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ - 0x00d66340 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ - 0x00d66350 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ - 0x00d66360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d66370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d66380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d66390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d663a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d663b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d663c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d663d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d663e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d663f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d66400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d66410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d66420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d66430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d66440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d66450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d66460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d66470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d66480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d66490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d664a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d664b0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d664c0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d664d0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d664e0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d664f0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d66500 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d66510 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ - 0x00d66520 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d66530 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d66540 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d66550 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d66560 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ - 0x00d66570 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d66580 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ - 0x00d66590 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ - 0x00d665a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d665b0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d665c0 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ - 0x00d665d0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d665e0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d665f0 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ - 0x00d66600 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ - 0x00d66610 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d66620 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ - 0x00d66630 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ - 0x00d66640 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ - 0x00d66650 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ - 0x00d66660 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ - 0x00d66670 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d66680 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ - 0x00d66690 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ - 0x00d666a0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d666b0 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ - 0x00d666c0 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ - 0x00d666d0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d666e0 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ - 0x00d666f0 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ - 0x00d66700 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ - 0x00d66710 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ - 0x00d66720 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d66730 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d66740 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d66750 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ - 0x00d66760 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ - 0x00d66770 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ - 0x00d66780 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ - 0x00d66790 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d667a0 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ - 0x00d667b0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d667c0 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ - 0x00d667d0 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ - 0x00d667e0 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ - 0x00d667f0 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ - 0x00d66800 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ - 0x00d66810 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ - 0x00d66820 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ - 0x00d66830 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ - 0x00d66840 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ - 0x00d66850 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d66860 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ - 0x00d66870 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ - 0x00d66880 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ - 0x00d66890 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00d668a0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d668b0 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ - 0x00d668c0 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ - 0x00d668d0 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ - 0x00d668e0 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ - 0x00d668f0 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ - 0x00d66900 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d66910 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ - 0x00d66920 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ - 0x00d66930 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00d66940 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ - 0x00d66950 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ - 0x00d66960 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ - 0x00d66970 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ - 0x00d66980 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ - 0x00d66990 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d669a0 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ - 0x00d669b0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00d669c0 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ - 0x00d669d0 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ - 0x00d669e0 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ - 0x00d669f0 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ - 0x00d66a00 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ - 0x00d66a10 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d66a20 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ - 0x00d66a30 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ - 0x00d66a40 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ - 0x00d66a50 7365200a 20202020 20207265 7475726e se . return │ │ │ │ - 0x00d66a60 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d66a70 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00d66a80 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00d66a90 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d66aa0 203d2061 5f74636f 6f72643b 200a2020 = a_tcoord; . │ │ │ │ - 0x00d66ab0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d66ac0 76656334 28615f70 6f732c20 302e302c vec4(a_pos, 0.0, │ │ │ │ - 0x00d66ad0 20312e30 293b200a 20207d20 0a000000 1.0); . } .... │ │ │ │ - 0x00d66ae0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d66af0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d66b00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d66b10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d66b20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d66b30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d66b40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d66b50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d66b60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d66b70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d66b80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d66b90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d66ba0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d66bb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d66bc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d66bd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d66be0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d66bf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d66c00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d66c10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d66c20 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d66c30 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d66c40 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d66c50 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d66c60 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d66c70 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d66c80 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d66c90 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d66ca0 23656e64 6966200a 2020696e 20666c6f #endif . in flo │ │ │ │ - 0x00d66cb0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ - 0x00d66cc0 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ - 0x00d66cd0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d66ce0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d66cf0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d66d00 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d66d10 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d66d20 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d66d30 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d66d40 65633420 755f706f 73697469 6f6e3b20 ec4 u_position; │ │ │ │ - 0x00d66d50 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d66d60 755f6c69 6e655061 72616d73 3b200a20 u_lineParams; . │ │ │ │ - 0x00d66d70 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d66d80 5f616363 75726163 793b200a 2020756e _accuracy; . un │ │ │ │ - 0x00d66d90 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00d66da0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00d66db0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d66dc0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d66dd0 61742075 5f617a69 6d75743b 200a2020 at u_azimut; . │ │ │ │ - 0x00d66de0 636f6e73 7420666c 6f617420 6b416e74 const float kAnt │ │ │ │ - 0x00d66df0 69616c69 6173696e 67546872 6573686f ialiasingThresho │ │ │ │ - 0x00d66e00 6c64203d 20302e39 323b200a 2020636f ld = 0.92; . co │ │ │ │ - 0x00d66e10 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d66e20 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d66e30 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d66e40 696e2829 200a2020 7b200a20 20236966 in() . { . #if │ │ │ │ - 0x00d66e50 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ - 0x00d66e60 20202020 4c4f575f 50207665 63342063 LOW_P vec4 c │ │ │ │ - 0x00d66e70 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ - 0x00d66e80 0a202023 656c7365 200a2020 20204c4f . #else . LO │ │ │ │ - 0x00d66e90 575f5020 76656334 20636f6c 6f72203d W_P vec4 color = │ │ │ │ - 0x00d66ea0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00d66eb0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ - 0x00d66ec0 6f6f7264 293b200a 20202365 6e646966 oord); . #endif │ │ │ │ - 0x00d66ed0 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ - 0x00d66ee0 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ - 0x00d66ef0 20636f6c 6f722e61 202a3d20 28312e30 color.a *= (1.0 │ │ │ │ - 0x00d66f00 202d2073 6d6f6f74 68737465 70286b41 - smoothstep(kA │ │ │ │ - 0x00d66f10 6e746961 6c696173 696e6754 68726573 ntialiasingThres │ │ │ │ - 0x00d66f20 686f6c64 2c20312e 302c2061 62732876 hold, 1.0, abs(v │ │ │ │ - 0x00d66f30 5f6c656e 67746859 2929293b 200a2020 _lengthY))); . │ │ │ │ - 0x00d66f40 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d66f50 636f6c6f 723b200a 20207d20 0a000000 color; . } .... │ │ │ │ - 0x00d66f60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d66f70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d66f80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d66f90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d66fa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d66fb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d66fc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d66fd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d66fe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d66ff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d67000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d67010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d67020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d67030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d67040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d67050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d67060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d67070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d67080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d67090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d670a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d670b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d670c0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d670d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d670e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d670f0 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ - 0x00d67100 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ - 0x00d67110 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ - 0x00d67120 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ - 0x00d67130 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ - 0x00d67140 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d67150 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ - 0x00d67160 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ - 0x00d67170 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ - 0x00d67180 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d67190 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d671a0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d671b0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d671c0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d671d0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d671e0 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ - 0x00d671f0 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00d67200 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ - 0x00d67210 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ - 0x00d67220 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ - 0x00d67230 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d67240 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d67250 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d67260 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d67270 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ - 0x00d67280 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ - 0x00d67290 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ - 0x00d672a0 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00d672b0 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ - 0x00d672c0 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ - 0x00d672d0 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ - 0x00d672e0 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ - 0x00d672f0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d67300 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d67310 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d67320 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00d67330 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00d67340 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00d67350 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00d67360 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00d67370 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d67380 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d67390 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00d673a0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00d673b0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00d673c0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d673d0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00d673e0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00d673f0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00d67400 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00d67410 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00d67420 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00d67430 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d67440 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00d67450 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00d67460 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d67470 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00d67480 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00d67490 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d674a0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00d674b0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00d674c0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00d674d0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d674e0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00d674f0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00d67500 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00d67510 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d67520 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d67530 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d67540 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d67550 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00d67560 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00d67570 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00d67580 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00d67590 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00d675a0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d675b0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d675c0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00d675d0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00d675e0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00d675f0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00d67600 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00d67610 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00d67620 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d67630 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00d67640 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d67650 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00d67660 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00d67670 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00d67680 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00d67690 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00d676a0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d676b0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00d676c0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00d676d0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00d676e0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00d676f0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00d67700 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d67710 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00d67720 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00d67730 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00d67740 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00d67750 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00d67760 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00d67770 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00d67780 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00d67790 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00d677a0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00d677b0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00d677c0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00d677d0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00d677e0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00d677f0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00d67800 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00d67810 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00d67820 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d67830 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00d67840 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00d67850 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00d67860 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d67870 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00d67880 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d67890 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00d678a0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00d678b0 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00d678c0 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00d678d0 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00d678e0 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ - 0x00d678f0 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ - 0x00d67900 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ - 0x00d67910 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ - 0x00d67920 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ - 0x00d67930 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00d67940 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00d67950 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ - 0x00d67960 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ - 0x00d67970 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ - 0x00d67980 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ - 0x00d67990 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d679a0 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ - 0x00d679b0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00d679c0 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ - 0x00d679d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d679e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d679f0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d67a00 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ - 0x00d67a10 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ - 0x00d67a20 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ - 0x00d67a30 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ - 0x00d67a40 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ - 0x00d67a50 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00d67a60 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ - 0x00d67a70 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ - 0x00d67a80 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ - 0x00d67a90 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ - 0x00d67aa0 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ - 0x00d67ab0 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ - 0x00d67ac0 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ - 0x00d67ad0 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ - 0x00d67ae0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00d67af0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00d67b00 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d67b10 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d67b20 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ - 0x00d67b30 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ - 0x00d67b40 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ - 0x00d67b50 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00d67b60 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00d67b70 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00d67b80 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00d67b90 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00d67ba0 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00d67bb0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d67bc0 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00d67bd0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d67be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d67bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d67c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d67c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d67c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d67c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d67c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d67c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d67c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d67c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d67c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d67c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d67ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d67cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d67cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d67cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d67ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d67cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d67d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d67d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d67d20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d67d30 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ - 0x00d67d40 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ - 0x00d67d50 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ - 0x00d67d60 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ - 0x00d67d70 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ - 0x00d67d80 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00d67d90 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ - 0x00d67da0 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ - 0x00d67db0 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ - 0x00d67dc0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00d67dd0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00d67de0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00d67df0 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ - 0x00d67e00 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d67e10 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ - 0x00d67e20 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ - 0x00d67e30 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ - 0x00d67e40 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ - 0x00d67e50 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ - 0x00d67e60 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ - 0x00d67e70 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ - 0x00d67e80 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ - 0x00d67e90 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ - 0x00d67ea0 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ - 0x00d67eb0 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ - 0x00d67ec0 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ - 0x00d67ed0 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ - 0x00d67ee0 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ - 0x00d67ef0 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ - 0x00d67f00 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ - 0x00d67f10 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ - 0x00d67f20 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ - 0x00d67f30 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d67f40 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ - 0x00d67f50 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ - 0x00d67f60 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ - 0x00d67f70 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ - 0x00d67f80 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ - 0x00d67f90 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d67fa0 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ - 0x00d67fb0 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ - 0x00d67fc0 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ - 0x00d67fd0 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ - 0x00d67fe0 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ - 0x00d67ff0 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ - 0x00d68000 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ - 0x00d68010 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ - 0x00d68020 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ - 0x00d68030 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ - 0x00d68040 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ - 0x00d68050 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ - 0x00d68060 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ - 0x00d68070 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ - 0x00d68080 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ - 0x00d68090 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ - 0x00d680a0 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ - 0x00d680b0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00d680c0 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ - 0x00d680d0 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ - 0x00d680e0 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ - 0x00d680f0 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ - 0x00d68100 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ - 0x00d68110 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ - 0x00d68120 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ - 0x00d68130 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ - 0x00d68140 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ - 0x00d68150 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ - 0x00d68160 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ - 0x00d68170 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ - 0x00d68180 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ - 0x00d68190 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ - 0x00d681a0 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ - 0x00d681b0 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ - 0x00d681c0 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ - 0x00d681d0 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ - 0x00d681e0 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ - 0x00d681f0 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ - 0x00d68200 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ - 0x00d68210 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ - 0x00d68220 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ - 0x00d68230 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ - 0x00d68240 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ - 0x00d68250 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ - 0x00d68260 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ - 0x00d68270 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00d68280 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00d68290 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00d682a0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00d682b0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00d682c0 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ - 0x00d682d0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00d682e0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00d682f0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00d68300 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00d68310 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00d68320 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00d68330 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00d68340 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00d68350 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ - 0x00d68360 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ - 0x00d68370 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ - 0x00d68380 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ - 0x00d68390 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ - 0x00d683a0 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ - 0x00d683b0 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ - 0x00d683c0 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ - 0x00d683d0 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ - 0x00d683e0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00d683f0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00d68400 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00d68410 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00d68420 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ - 0x00d68430 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00d68440 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00d68450 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00d68460 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00d68470 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00d68480 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ - 0x00d68490 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00d684a0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00d684b0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00d684c0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00d684d0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00d684e0 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00d684f0 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00d68500 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00d68510 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ - 0x00d68520 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ - 0x00d68530 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ - 0x00d68540 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ - 0x00d68550 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ - 0x00d68560 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ - 0x00d68570 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ - 0x00d68580 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ - 0x00d68590 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ - 0x00d685a0 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ - 0x00d685b0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00d685c0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00d685d0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00d685e0 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ - 0x00d685f0 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ - 0x00d68600 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ - 0x00d68610 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ - 0x00d68620 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ - 0x00d68630 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ - 0x00d68640 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ - 0x00d68650 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ - 0x00d68660 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ - 0x00d68670 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ - 0x00d68680 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ - 0x00d68690 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ - 0x00d686a0 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ - 0x00d686b0 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ - 0x00d686c0 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ - 0x00d686d0 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ - 0x00d686e0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d686f0 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ - 0x00d68700 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ - 0x00d68710 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ - 0x00d68720 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ - 0x00d68730 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ - 0x00d68740 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ - 0x00d68750 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ - 0x00d68760 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00d68770 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ - 0x00d68780 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00d68790 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ - 0x00d687a0 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ - 0x00d687b0 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ - 0x00d687c0 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ - 0x00d687d0 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ - 0x00d687e0 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ - 0x00d687f0 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ - 0x00d68800 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ - 0x00d68810 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ - 0x00d68820 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ - 0x00d68830 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ - 0x00d68840 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ - 0x00d68850 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ - 0x00d68860 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ - 0x00d68870 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ - 0x00d68880 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ - 0x00d68890 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ - 0x00d688a0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00d688b0 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ - 0x00d688c0 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ - 0x00d688d0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ - 0x00d688e0 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ - 0x00d688f0 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ - 0x00d68900 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ - 0x00d68910 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ - 0x00d68920 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ - 0x00d68930 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ - 0x00d68940 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ - 0x00d68950 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ - 0x00d68960 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ - 0x00d68970 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ - 0x00d68980 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ - 0x00d68990 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ - 0x00d689a0 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ - 0x00d689b0 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ - 0x00d689c0 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ - 0x00d689d0 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ - 0x00d689e0 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ - 0x00d689f0 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ - 0x00d68a00 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ - 0x00d68a10 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ - 0x00d68a20 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ - 0x00d68a30 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ - 0x00d68a40 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ - 0x00d68a50 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ - 0x00d68a60 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d68a70 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d68a80 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d68a90 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d68aa0 65633420 77656967 68747320 3d207665 ec4 weights = ve │ │ │ │ - 0x00d68ab0 63342830 2e302c20 302e302c 20302e30 c4(0.0, 0.0, 0.0 │ │ │ │ - 0x00d68ac0 2c20302e 30293b20 0a202020 20766563 , 0.0); . vec │ │ │ │ - 0x00d68ad0 32206520 3d207465 78747572 6528755f 2 e = texture(u_ │ │ │ │ - 0x00d68ae0 636f6c6f 72546578 2c20765f 636f6f72 colorTex, v_coor │ │ │ │ - 0x00d68af0 64732e78 79292e72 673b200a 20202020 ds.xy).rg; . │ │ │ │ - 0x00d68b00 69662028 652e6720 3e20302e 3029202f if (e.g > 0.0) / │ │ │ │ - 0x00d68b10 2f204564 67652061 74206e6f 72746820 / Edge at north │ │ │ │ - 0x00d68b20 0a202020 207b200a 20202020 20207665 . { . ve │ │ │ │ - 0x00d68b30 63322064 3b200a20 20202020 20766563 c2 d; . vec │ │ │ │ - 0x00d68b40 3320636f 6f726473 3b200a20 20202020 3 coords; . │ │ │ │ - 0x00d68b50 20636f6f 7264732e 78203d20 534d4141 coords.x = SMAA │ │ │ │ - 0x00d68b60 53656172 6368584c 65667428 765f6f66 SearchXLeft(v_of │ │ │ │ - 0x00d68b70 66736574 302e7879 2c20765f 6f666673 fset0.xy, v_offs │ │ │ │ - 0x00d68b80 6574322e 78293b20 0a202020 20202063 et2.x); . c │ │ │ │ - 0x00d68b90 6f6f7264 732e7920 3d20765f 6f666673 oords.y = v_offs │ │ │ │ - 0x00d68ba0 6574312e 793b200a 20202020 2020642e et1.y; . d. │ │ │ │ - 0x00d68bb0 78203d20 636f6f72 64732e78 3b200a20 x = coords.x; . │ │ │ │ - 0x00d68bc0 20202020 20666c6f 61742065 31203d20 float e1 = │ │ │ │ - 0x00d68bd0 534d4141 53616d70 6c654c65 76656c5a SMAASampleLevelZ │ │ │ │ - 0x00d68be0 65726f28 755f636f 6c6f7254 65782c20 ero(u_colorTex, │ │ │ │ - 0x00d68bf0 636f6f72 64732e78 79292e72 3b200a20 coords.xy).r; . │ │ │ │ - 0x00d68c00 20202020 20636f6f 7264732e 7a203d20 coords.z = │ │ │ │ - 0x00d68c10 534d4141 53656172 63685852 69676874 SMAASearchXRight │ │ │ │ - 0x00d68c20 28765f6f 66667365 74302e7a 772c2076 (v_offset0.zw, v │ │ │ │ - 0x00d68c30 5f6f6666 73657432 2e79293b 200a2020 _offset2.y); . │ │ │ │ - 0x00d68c40 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ - 0x00d68c50 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ - 0x00d68c60 7a7a203d 20755f66 72616d65 62756666 zz = u_framebuff │ │ │ │ - 0x00d68c70 65724d65 74726963 732e7a7a 3b200a20 erMetrics.zz; . │ │ │ │ - 0x00d68c80 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ - 0x00d68c90 41526f75 6e64287a 7a202a20 64202d20 ARound(zz * d - │ │ │ │ - 0x00d68ca0 765f636f 6f726473 2e7a7a29 293b200a v_coords.zz)); . │ │ │ │ - 0x00d68cb0 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ - 0x00d68cc0 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ - 0x00d68cd0 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ - 0x00d68ce0 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ - 0x00d68cf0 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ - 0x00d68d00 5465782c 20636f6f 7264732e 7a792c20 Tex, coords.zy, │ │ │ │ - 0x00d68d10 534d4141 4f666673 65742831 2c203029 SMAAOffset(1, 0) │ │ │ │ - 0x00d68d20 292e723b 200a2020 20202020 77656967 ).r; . weig │ │ │ │ - 0x00d68d30 6874732e 7267203d 20534d41 41417265 hts.rg = SMAAAre │ │ │ │ - 0x00d68d40 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ - 0x00d68d50 293b200a 20202020 7d200a20 20202069 ); . } . i │ │ │ │ - 0x00d68d60 66202865 2e72203e 20302e30 29202f2f f (e.r > 0.0) // │ │ │ │ - 0x00d68d70 20456467 65206174 20776573 74200a20 Edge at west . │ │ │ │ - 0x00d68d80 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ - 0x00d68d90 20643b20 0a202020 20202076 65633320 d; . vec3 │ │ │ │ - 0x00d68da0 636f6f72 64733b20 0a202020 20202063 coords; . c │ │ │ │ - 0x00d68db0 6f6f7264 732e7920 3d20534d 41415365 oords.y = SMAASe │ │ │ │ - 0x00d68dc0 61726368 59557028 765f6f66 66736574 archYUp(v_offset │ │ │ │ - 0x00d68dd0 312e7879 2c20765f 6f666673 6574322e 1.xy, v_offset2. │ │ │ │ - 0x00d68de0 7a293b20 0a202020 20202063 6f6f7264 z); . coord │ │ │ │ - 0x00d68df0 732e7820 3d20765f 6f666673 6574302e s.x = v_offset0. │ │ │ │ - 0x00d68e00 783b200a 20202020 2020642e 78203d20 x; . d.x = │ │ │ │ - 0x00d68e10 636f6f72 64732e79 3b200a20 20202020 coords.y; . │ │ │ │ - 0x00d68e20 20666c6f 61742065 31203d20 534d4141 float e1 = SMAA │ │ │ │ - 0x00d68e30 53616d70 6c654c65 76656c5a 65726f28 SampleLevelZero( │ │ │ │ - 0x00d68e40 755f636f 6c6f7254 65782c20 636f6f72 u_colorTex, coor │ │ │ │ - 0x00d68e50 64732e78 79292e67 3b200a20 20202020 ds.xy).g; . │ │ │ │ - 0x00d68e60 20636f6f 7264732e 7a203d20 534d4141 coords.z = SMAA │ │ │ │ - 0x00d68e70 53656172 63685944 6f776e28 765f6f66 SearchYDown(v_of │ │ │ │ - 0x00d68e80 66736574 312e7a77 2c20765f 6f666673 fset1.zw, v_offs │ │ │ │ - 0x00d68e90 6574322e 77293b20 0a202020 20202064 et2.w); . d │ │ │ │ - 0x00d68ea0 2e79203d 20636f6f 7264732e 7a3b200a .y = coords.z; . │ │ │ │ - 0x00d68eb0 20202020 20207665 63322077 77203d20 vec2 ww = │ │ │ │ - 0x00d68ec0 755f6672 616d6562 75666665 724d6574 u_framebufferMet │ │ │ │ - 0x00d68ed0 72696373 2e77773b 200a2020 20202020 rics.ww; . │ │ │ │ - 0x00d68ee0 64203d20 61627328 534d4141 526f756e d = abs(SMAARoun │ │ │ │ - 0x00d68ef0 64287777 202a2064 202d2076 5f636f6f d(ww * d - v_coo │ │ │ │ - 0x00d68f00 7264732e 77772929 3b200a20 20202020 rds.ww)); . │ │ │ │ - 0x00d68f10 20766563 32207371 72745f64 203d2073 vec2 sqrt_d = s │ │ │ │ - 0x00d68f20 71727428 64293b20 0a202020 20202066 qrt(d); . f │ │ │ │ - 0x00d68f30 6c6f6174 20653220 3d20534d 41415361 loat e2 = SMAASa │ │ │ │ - 0x00d68f40 6d706c65 4c657665 6c5a6572 6f4f6666 mpleLevelZeroOff │ │ │ │ - 0x00d68f50 73657428 755f636f 6c6f7254 65782c20 set(u_colorTex, │ │ │ │ - 0x00d68f60 636f6f72 64732e78 7a2c2053 4d41414f coords.xz, SMAAO │ │ │ │ - 0x00d68f70 66667365 7428302c 20312929 2e673b20 ffset(0, 1)).g; │ │ │ │ - 0x00d68f80 0a202020 20202077 65696768 74732e62 . weights.b │ │ │ │ - 0x00d68f90 61203d20 534d4141 41726561 28737172 a = SMAAArea(sqr │ │ │ │ - 0x00d68fa0 745f642c 2065312c 20653229 3b200a20 t_d, e1, e2); . │ │ │ │ - 0x00d68fb0 2020207d 200a2020 2020765f 46726167 } . v_Frag │ │ │ │ - 0x00d68fc0 436f6c6f 72203d20 77656967 6874733b Color = weights; │ │ │ │ - 0x00d68fd0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d68fe0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d68ff0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d69000 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d69010 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d69020 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d69030 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d69040 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d69050 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d69060 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d69070 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d69080 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d69090 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d690a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d690b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d690c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d690d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d690e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d690f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d69100 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d69110 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d69120 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d69130 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d69140 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d69150 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ - 0x00d69160 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d69170 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ - 0x00d69180 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ - 0x00d69190 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ - 0x00d691a0 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ - 0x00d691b0 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ - 0x00d691c0 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ - 0x00d691d0 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ - 0x00d691e0 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ - 0x00d691f0 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ - 0x00d69200 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ - 0x00d69210 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ - 0x00d69220 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00d69230 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ - 0x00d69240 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ - 0x00d69250 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ - 0x00d69260 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d69270 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ - 0x00d69280 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00d69290 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ - 0x00d692a0 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ - 0x00d692b0 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ - 0x00d692c0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d692d0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d692e0 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00d692f0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d69300 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d69310 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d69320 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00d69330 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d69340 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d69350 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00d69360 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00d69370 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00d69380 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d69390 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00d693a0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d693b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d693c0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d693d0 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00d693e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d693f0 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00d69400 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00d69410 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d69420 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d69430 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00d69440 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00d69450 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d69460 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00d69470 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00d69480 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d69490 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00d694a0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00d694b0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00d694c0 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00d694d0 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00d694e0 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00d694f0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00d69500 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00d69510 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00d69520 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00d69530 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00d69540 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00d69550 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00d69560 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d69570 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00d69580 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00d69590 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d695a0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00d695b0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00d695c0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d695d0 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00d695e0 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00d695f0 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00d69600 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d69610 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00d69620 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00d69630 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00d69640 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00d69650 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00d69660 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00d69670 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00d69680 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00d69690 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00d696a0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00d696b0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00d696c0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d696d0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d696e0 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00d696f0 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00d69700 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00d69710 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00d69720 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00d69730 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00d69740 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00d69750 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00d69760 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00d69770 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00d69780 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00d69790 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00d697a0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00d697b0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d697c0 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00d697d0 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00d697e0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d697f0 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00d69800 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00d69810 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00d69820 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d69830 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00d69840 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00d69850 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ - 0x00d69860 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ - 0x00d69870 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ - 0x00d69880 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ - 0x00d69890 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ - 0x00d698a0 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ - 0x00d698b0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d698c0 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ - 0x00d698d0 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ - 0x00d698e0 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ - 0x00d698f0 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00d69900 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ - 0x00d69910 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d69920 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ - 0x00d69930 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ - 0x00d69940 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ - 0x00d69950 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00d69960 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ - 0x00d69970 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d69980 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ - 0x00d69990 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ - 0x00d699a0 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ - 0x00d699b0 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ - 0x00d699c0 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ - 0x00d699d0 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ - 0x00d699e0 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00d699f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d69a00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d69a10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d69a20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d69a30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d69a40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d69a50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d69a60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d69a70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d69a80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d69a90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d69aa0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d69ab0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d69ac0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d69ad0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d69ae0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d69af0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d69b00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d69b10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d69b20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d69b30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d69b40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d69b50 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d69b60 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ - 0x00d69b70 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ - 0x00d69b80 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ - 0x00d69b90 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ - 0x00d69ba0 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ - 0x00d69bb0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ - 0x00d69bc0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d69bd0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d69be0 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d69bf0 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ - 0x00d69c00 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ - 0x00d69c10 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ - 0x00d69c20 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ - 0x00d69c30 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ - 0x00d69c40 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d69c50 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ - 0x00d69c60 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ - 0x00d69c70 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ - 0x00d69c80 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ - 0x00d69c90 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ - 0x00d69ca0 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ - 0x00d69cb0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d69cc0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d69cd0 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ - 0x00d69ce0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d69cf0 20666c6f 6174204c 203d2064 6f742874 float L = dot(t │ │ │ │ - 0x00d69d00 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00d69d10 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ - 0x00d69d20 72647329 2e726762 2c206b57 65696768 rds).rgb, kWeigh │ │ │ │ - 0x00d69d30 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ - 0x00d69d40 4c6c6566 74203d20 646f7428 74657874 Lleft = dot(text │ │ │ │ - 0x00d69d50 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d69d60 765f6f66 66736574 302e7879 292e7267 v_offset0.xy).rg │ │ │ │ - 0x00d69d70 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ - 0x00d69d80 20202066 6c6f6174 204c746f 70203d20 float Ltop = │ │ │ │ - 0x00d69d90 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ - 0x00d69da0 6c6f7254 65782c20 765f6f66 66736574 lorTex, v_offset │ │ │ │ - 0x00d69db0 302e7a77 292e7267 622c206b 57656967 0.zw).rgb, kWeig │ │ │ │ - 0x00d69dc0 68747329 3b200a20 20202076 65633420 hts); . vec4 │ │ │ │ - 0x00d69dd0 64656c74 613b200a 20202020 64656c74 delta; . delt │ │ │ │ - 0x00d69de0 612e7879 203d2061 6273284c 202d2076 a.xy = abs(L - v │ │ │ │ - 0x00d69df0 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ - 0x00d69e00 293b200a 20202020 76656332 20656467 ); . vec2 edg │ │ │ │ - 0x00d69e10 6573203d 20737465 70286b54 68726573 es = step(kThres │ │ │ │ - 0x00d69e20 686f6c64 2c206465 6c74612e 7879293b hold, delta.xy); │ │ │ │ - 0x00d69e30 200a2020 20206966 2028646f 74286564 . if (dot(ed │ │ │ │ - 0x00d69e40 6765732c 20766563 3228312e 302c2031 ges, vec2(1.0, 1 │ │ │ │ - 0x00d69e50 2e302929 203d3d20 302e3029 200a2020 .0)) == 0.0) . │ │ │ │ - 0x00d69e60 20202020 20206469 73636172 643b200a discard; . │ │ │ │ - 0x00d69e70 20202020 666c6f61 74204c72 69676874 float Lright │ │ │ │ - 0x00d69e80 203d2064 6f742874 65787475 72652875 = dot(texture(u │ │ │ │ - 0x00d69e90 5f636f6c 6f725465 782c2076 5f6f6666 _colorTex, v_off │ │ │ │ - 0x00d69ea0 73657431 2e787929 2e726762 2c206b57 set1.xy).rgb, kW │ │ │ │ - 0x00d69eb0 65696768 7473293b 200a2020 2020666c eights); . fl │ │ │ │ - 0x00d69ec0 6f617420 4c626f74 746f6d20 203d2064 oat Lbottom = d │ │ │ │ - 0x00d69ed0 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ - 0x00d69ee0 6f725465 782c2076 5f6f6666 73657431 orTex, v_offset1 │ │ │ │ - 0x00d69ef0 2e7a7729 2e726762 2c206b57 65696768 .zw).rgb, kWeigh │ │ │ │ - 0x00d69f00 7473293b 200a2020 20206465 6c74612e ts); . delta. │ │ │ │ - 0x00d69f10 7a77203d 20616273 284c202d 20766563 zw = abs(L - vec │ │ │ │ - 0x00d69f20 32284c72 69676874 2c204c62 6f74746f 2(Lright, Lbotto │ │ │ │ - 0x00d69f30 6d29293b 200a2020 20207665 6332206d m)); . vec2 m │ │ │ │ - 0x00d69f40 61784465 6c746120 3d206d61 78286465 axDelta = max(de │ │ │ │ - 0x00d69f50 6c74612e 78792c20 64656c74 612e7a77 lta.xy, delta.zw │ │ │ │ - 0x00d69f60 293b200a 20202020 666c6f61 74204c6c ); . float Ll │ │ │ │ - 0x00d69f70 6566746c 65667420 3d20646f 74287465 eftleft = dot(te │ │ │ │ - 0x00d69f80 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00d69f90 2c20765f 6f666673 6574322e 7879292e , v_offset2.xy). │ │ │ │ - 0x00d69fa0 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ - 0x00d69fb0 0a202020 20666c6f 6174204c 746f7074 . float Ltopt │ │ │ │ - 0x00d69fc0 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ - 0x00d69fd0 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ - 0x00d69fe0 66667365 74322e7a 77292e72 67622c20 ffset2.zw).rgb, │ │ │ │ - 0x00d69ff0 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ - 0x00d6a000 64656c74 612e7a77 203d2061 62732876 delta.zw = abs(v │ │ │ │ - 0x00d6a010 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ - 0x00d6a020 202d2076 65633228 4c6c6566 746c6566 - vec2(Lleftlef │ │ │ │ - 0x00d6a030 742c204c 746f7074 6f702929 3b200a20 t, Ltoptop)); . │ │ │ │ - 0x00d6a040 2020206d 61784465 6c746120 3d206d61 maxDelta = ma │ │ │ │ - 0x00d6a050 78286d61 7844656c 74612e78 792c2064 x(maxDelta.xy, d │ │ │ │ - 0x00d6a060 656c7461 2e7a7729 3b200a20 20202066 elta.zw); . f │ │ │ │ - 0x00d6a070 6c6f6174 2066696e 616c4465 6c746120 loat finalDelta │ │ │ │ - 0x00d6a080 3d206d61 78286d61 7844656c 74612e78 = max(maxDelta.x │ │ │ │ - 0x00d6a090 2c206d61 7844656c 74612e79 293b200a , maxDelta.y); . │ │ │ │ - 0x00d6a0a0 20202020 65646765 73202a3d 20737465 edges *= ste │ │ │ │ - 0x00d6a0b0 70286669 6e616c44 656c7461 2c20534d p(finalDelta, SM │ │ │ │ - 0x00d6a0c0 41415f4c 4f43414c 5f434f4e 54524153 AA_LOCAL_CONTRAS │ │ │ │ - 0x00d6a0d0 545f4144 41505441 54494f4e 5f464143 T_ADAPTATION_FAC │ │ │ │ - 0x00d6a0e0 544f5220 2a206465 6c74612e 7879293b TOR * delta.xy); │ │ │ │ - 0x00d6a0f0 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ - 0x00d6a100 72203d20 76656334 28656467 65732c20 r = vec4(edges, │ │ │ │ - 0x00d6a110 302e302c 20312e30 293b200a 20207d20 0.0, 1.0); . } │ │ │ │ - 0x00d6a120 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d6a130 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d6a140 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6a150 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6a160 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6a170 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6a180 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6a190 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6a1a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6a1b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6a1c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6a1d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6a1e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6a1f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6a200 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6a210 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6a220 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6a230 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6a240 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6a250 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6a260 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6a270 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6a280 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6a290 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d6a2a0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d6a2b0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d6a2c0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d6a2d0 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00d6a2e0 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ - 0x00d6a2f0 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ - 0x00d6a300 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ - 0x00d6a310 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d6a320 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ - 0x00d6a330 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ - 0x00d6a340 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d6a350 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d6a360 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d6a370 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d6a380 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d6a390 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d6a3a0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d6a3b0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d6a3c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d6a3d0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d6a3e0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d6a3f0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d6a400 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d6a410 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d6a420 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d6a430 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d6a440 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d6a450 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d6a460 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d6a470 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d6a480 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d6a490 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d6a4a0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d6a4b0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d6a4c0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d6a4d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d6a4e0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d6a4f0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d6a500 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d6a510 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d6a520 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d6a530 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d6a540 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d6a550 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d6a560 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d6a570 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d6a580 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d6a590 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d6a5a0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d6a5b0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d6a5c0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d6a5d0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d6a5e0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d6a5f0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d6a600 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d6a610 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d6a620 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d6a630 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d6a640 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d6a650 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d6a660 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d6a670 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d6a680 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d6a690 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d6a6a0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d6a6b0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d6a6c0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d6a6d0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d6a6e0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d6a6f0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d6a700 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d6a710 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d6a720 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d6a730 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d6a740 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d6a750 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d6a760 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d6a770 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d6a780 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d6a790 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d6a7a0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d6a7b0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d6a7c0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d6a7d0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d6a7e0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d6a7f0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d6a800 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d6a810 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d6a820 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d6a830 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d6a840 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d6a850 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d6a860 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d6a870 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d6a880 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d6a890 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d6a8a0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d6a8b0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d6a8c0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d6a8d0 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ - 0x00d6a8e0 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ - 0x00d6a8f0 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ - 0x00d6a900 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ - 0x00d6a910 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00d6a920 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ - 0x00d6a930 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ - 0x00d6a940 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ - 0x00d6a950 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ - 0x00d6a960 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ - 0x00d6a970 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ - 0x00d6a980 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ - 0x00d6a990 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ - 0x00d6a9a0 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ - 0x00d6a9b0 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ - 0x00d6a9c0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00d6a9d0 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ - 0x00d6a9e0 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ - 0x00d6a9f0 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ - 0x00d6aa00 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ - 0x00d6aa10 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ - 0x00d6aa20 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00d6aa30 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00d6aa40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6aa50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6aa60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6aa70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6aa80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6aa90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6aaa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6aab0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6aac0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6aad0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6aae0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6aaf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6ab00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6ab10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6ab20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6ab30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6ab40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6ab50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6ab60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6ab70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6ab80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6ab90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d6aba0 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ - 0x00d6abb0 765f6f66 66736574 3b200a20 206f7574 v_offset; . out │ │ │ │ - 0x00d6abc0 20766563 3420765f 46726167 436f6c6f vec4 v_FragColo │ │ │ │ - 0x00d6abd0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d6abe0 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ - 0x00d6abf0 4d657472 6963733b 200a2020 756e6966 Metrics; . unif │ │ │ │ - 0x00d6ac00 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00d6ac10 636f6c6f 72546578 3b200a20 20756e69 colorTex; . uni │ │ │ │ - 0x00d6ac20 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00d6ac30 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ - 0x00d6ac40 65783b20 0a202023 64656669 6e652053 ex; . #define S │ │ │ │ - 0x00d6ac50 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ - 0x00d6ac60 726f2874 65782c20 636f6f72 64292074 ro(tex, coord) t │ │ │ │ - 0x00d6ac70 65787475 72654c6f 64287465 782c2063 extureLod(tex, c │ │ │ │ - 0x00d6ac80 6f6f7264 2c20302e 3029200a 2020636f oord, 0.0) . co │ │ │ │ - 0x00d6ac90 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d6aca0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d6acb0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d6acc0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d6acd0 65633420 613b200a 20202020 612e7820 ec4 a; . a.x │ │ │ │ - 0x00d6ace0 3d207465 78747572 6528755f 626c656e = texture(u_blen │ │ │ │ - 0x00d6acf0 64696e67 57656967 68745465 782c2076 dingWeightTex, v │ │ │ │ - 0x00d6ad00 5f6f6666 7365742e 7879292e 613b202f _offset.xy).a; / │ │ │ │ - 0x00d6ad10 2f205269 67687420 0a202020 20612e79 / Right . a.y │ │ │ │ - 0x00d6ad20 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ - 0x00d6ad30 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ - 0x00d6ad40 765f6f66 66736574 2e7a7729 2e673b20 v_offset.zw).g; │ │ │ │ - 0x00d6ad50 2f2f2054 6f70200a 20202020 612e777a // Top . a.wz │ │ │ │ - 0x00d6ad60 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ - 0x00d6ad70 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ - 0x00d6ad80 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d6ad90 292e787a 3b202f2f 20426f74 746f6d20 ).xz; // Bottom │ │ │ │ - 0x00d6ada0 2f204c65 6674200a 20202020 69662028 / Left . if ( │ │ │ │ - 0x00d6adb0 646f7428 612c2076 65633428 312e302c dot(a, vec4(1.0, │ │ │ │ - 0x00d6adc0 20312e30 2c20312e 302c2031 2e302929 1.0, 1.0, 1.0)) │ │ │ │ - 0x00d6add0 203c2031 652d3529 200a2020 20207b20 < 1e-5) . { │ │ │ │ - 0x00d6ade0 0a202020 20202076 5f467261 67436f6c . v_FragCol │ │ │ │ - 0x00d6adf0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d6ae00 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ - 0x00d6ae10 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ - 0x00d6ae20 207d200a 20202020 656c7365 200a2020 } . else . │ │ │ │ - 0x00d6ae30 20207b20 0a202020 20202076 65633420 { . vec4 │ │ │ │ - 0x00d6ae40 626c656e 64696e67 4f666673 6574203d blendingOffset = │ │ │ │ - 0x00d6ae50 20766563 3428302e 302c2061 2e792c20 vec4(0.0, a.y, │ │ │ │ - 0x00d6ae60 302e302c 20612e77 293b200a 20202020 0.0, a.w); . │ │ │ │ - 0x00d6ae70 20207665 63322062 6c656e64 696e6757 vec2 blendingW │ │ │ │ - 0x00d6ae80 65696768 74203d20 612e7977 3b200a20 eight = a.yw; . │ │ │ │ - 0x00d6ae90 20202020 20696620 286d6178 28612e78 if (max(a.x │ │ │ │ - 0x00d6aea0 2c20612e 7a29203e 206d6178 28612e79 , a.z) > max(a.y │ │ │ │ - 0x00d6aeb0 2c20612e 77292920 0a202020 2020207b , a.w)) . { │ │ │ │ - 0x00d6aec0 200a2020 20202020 2020626c 656e6469 . blendi │ │ │ │ - 0x00d6aed0 6e674f66 66736574 203d2076 65633428 ngOffset = vec4( │ │ │ │ - 0x00d6aee0 612e782c 20302e30 2c20612e 7a2c2030 a.x, 0.0, a.z, 0 │ │ │ │ - 0x00d6aef0 2e30293b 200a2020 20202020 2020626c .0); . bl │ │ │ │ - 0x00d6af00 656e6469 6e675765 69676874 203d2061 endingWeight = a │ │ │ │ - 0x00d6af10 2e787a3b 200a2020 20202020 7d200a20 .xz; . } . │ │ │ │ - 0x00d6af20 20202020 20626c65 6e64696e 67576569 blendingWei │ │ │ │ - 0x00d6af30 67687420 2f3d2064 6f742862 6c656e64 ght /= dot(blend │ │ │ │ - 0x00d6af40 696e6757 65696768 742c2076 65633228 ingWeight, vec2( │ │ │ │ - 0x00d6af50 312e302c 20312e30 29293b20 0a202020 1.0, 1.0)); . │ │ │ │ - 0x00d6af60 20202076 65633420 6263203d 20626c65 vec4 bc = ble │ │ │ │ - 0x00d6af70 6e64696e 674f6666 73657420 2a207665 ndingOffset * ve │ │ │ │ - 0x00d6af80 63342875 5f667261 6d656275 66666572 c4(u_framebuffer │ │ │ │ - 0x00d6af90 4d657472 6963732e 78792c20 2d755f66 Metrics.xy, -u_f │ │ │ │ - 0x00d6afa0 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ - 0x00d6afb0 732e7879 293b200a 20202020 20206263 s.xy); . bc │ │ │ │ - 0x00d6afc0 202b3d20 765f636f 6c6f7254 6578436f += v_colorTexCo │ │ │ │ - 0x00d6afd0 6f726473 2e787978 793b200a 20202020 ords.xyxy; . │ │ │ │ - 0x00d6afe0 20207665 63342063 6f6c6f72 203d2062 vec4 color = b │ │ │ │ - 0x00d6aff0 6c656e64 696e6757 65696768 742e7820 lendingWeight.x │ │ │ │ - 0x00d6b000 2a20534d 41415361 6d706c65 4c657665 * SMAASampleLeve │ │ │ │ - 0x00d6b010 6c5a6572 6f28755f 636f6c6f 72546578 lZero(u_colorTex │ │ │ │ - 0x00d6b020 2c206263 2e787929 3b200a20 20202020 , bc.xy); . │ │ │ │ - 0x00d6b030 20636f6c 6f72202b 3d20626c 656e6469 color += blendi │ │ │ │ - 0x00d6b040 6e675765 69676874 2e79202a 20534d41 ngWeight.y * SMA │ │ │ │ - 0x00d6b050 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ - 0x00d6b060 28755f63 6f6c6f72 5465782c 2062632e (u_colorTex, bc. │ │ │ │ - 0x00d6b070 7a77293b 200a2020 20202020 765f4672 zw); . v_Fr │ │ │ │ - 0x00d6b080 6167436f 6c6f7220 3d20636f 6c6f723b agColor = color; │ │ │ │ - 0x00d6b090 200a2020 20207d20 0a20207d 200a0000 . } . } ... │ │ │ │ - 0x00d6b0a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6b0b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6b0c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6b0d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6b0e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6b0f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6b100 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6b110 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6b120 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6b130 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6b140 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6b150 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6b160 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6b170 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6b180 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6b190 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6b1a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6b1b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6b1c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6b1d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6b1e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6b1f0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d6b200 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d6b210 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d6b220 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d6b230 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00d6b240 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ - 0x00d6b250 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ - 0x00d6b260 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ - 0x00d6b270 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d6b280 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d6b290 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00d6b2a0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d6b2b0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d6b2c0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d6b2d0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d6b2e0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00d6b2f0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d6b300 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00d6b310 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00d6b320 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00d6b330 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d6b340 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00d6b350 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d6b360 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d6b370 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d6b380 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00d6b390 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d6b3a0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00d6b3b0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00d6b3c0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d6b3d0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d6b3e0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00d6b3f0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00d6b400 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d6b410 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00d6b420 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00d6b430 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d6b440 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d6b450 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d6b460 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d6b470 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00d6b480 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d6b490 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d6b4a0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d6b4b0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d6b4c0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00d6b4d0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00d6b4e0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00d6b4f0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00d6b500 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00d6b510 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d6b520 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00d6b530 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00d6b540 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d6b550 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00d6b560 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00d6b570 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d6b580 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00d6b590 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00d6b5a0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00d6b5b0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d6b5c0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00d6b5d0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00d6b5e0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00d6b5f0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00d6b600 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00d6b610 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00d6b620 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00d6b630 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00d6b640 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00d6b650 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00d6b660 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00d6b670 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00d6b680 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d6b690 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00d6b6a0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00d6b6b0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00d6b6c0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00d6b6d0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00d6b6e0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00d6b6f0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00d6b700 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00d6b710 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00d6b720 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00d6b730 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00d6b740 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d6b750 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00d6b760 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d6b770 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00d6b780 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00d6b790 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00d6b7a0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00d6b7b0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00d6b7c0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00d6b7d0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d6b7e0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d6b7f0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00d6b800 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ - 0x00d6b810 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00d6b820 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ - 0x00d6b830 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ - 0x00d6b840 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00d6b850 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ - 0x00d6b860 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ - 0x00d6b870 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ - 0x00d6b880 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d6b890 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ - 0x00d6b8a0 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ - 0x00d6b8b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d6b8c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6b8d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6b8e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6b8f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6b900 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6b910 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6b920 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6b930 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6b940 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6b950 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6b960 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6b970 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6b980 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6b990 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6b9a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6b9b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6b9c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6b9d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6b9e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6b9f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6ba00 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d6ba10 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d6ba20 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d6ba30 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d6ba40 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d6ba50 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d6ba60 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d6ba70 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d6ba80 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ - 0x00d6ba90 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00d6baa0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d6bab0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00d6bac0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d6bad0 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ - 0x00d6bae0 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ - 0x00d6baf0 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ - 0x00d6bb00 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00d6bb10 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ - 0x00d6bb20 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d6bb30 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ - 0x00d6bb40 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00d6bb50 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00d6bb60 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ - 0x00d6bb70 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ - 0x00d6bb80 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ - 0x00d6bb90 6c696e65 50617373 3b200a20 20636f6e linePass; . con │ │ │ │ - 0x00d6bba0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d6bbb0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d6bbc0 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d6bbd0 6e282920 0a20207b 200a2020 23696664 n() . { . #ifd │ │ │ │ - 0x00d6bbe0 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ - 0x00d6bbf0 2020204c 4f575f50 20766563 34206669 LOW_P vec4 fi │ │ │ │ - 0x00d6bc00 6e616c43 6f6c6f72 203d2076 5f636f6c nalColor = v_col │ │ │ │ - 0x00d6bc10 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ - 0x00d6bc20 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ - 0x00d6bc30 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ - 0x00d6bc40 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d6bc50 636f6c6f 72546578 436f6f72 6473293b colorTexCoords); │ │ │ │ - 0x00d6bc60 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d6bc70 66696e61 6c436f6c 6f722e61 202a3d20 finalColor.a *= │ │ │ │ - 0x00d6bc80 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ - 0x00d6bc90 765f4672 6167436f 6c6f7220 3d206669 v_FragColor = fi │ │ │ │ - 0x00d6bca0 6e616c43 6f6c6f72 3b200a20 207d200a nalColor; . } . │ │ │ │ - 0x00d6bcb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d6bcc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6bcd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6bce0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6bcf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6bd00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6bd10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6bd20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6bd30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6bd40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6bd50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6bd60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6bd70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6bd80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6bd90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6bda0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6bdb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6bdc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6bdd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6bde0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6bdf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6be00 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d6be10 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d6be20 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d6be30 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d6be40 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d6be50 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d6be60 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d6be70 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d6be80 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ - 0x00d6be90 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ - 0x00d6bea0 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00d6beb0 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ - 0x00d6bec0 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ - 0x00d6bed0 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ - 0x00d6bee0 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ - 0x00d6bef0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d6bf00 206d6174 3420755f 7069766f 74547261 mat4 u_pivotTra │ │ │ │ - 0x00d6bf10 6e73666f 726d3b20 0a202075 6e69666f nsform; . unifo │ │ │ │ - 0x00d6bf20 726d2076 65633220 755f636f 6e747261 rm vec2 u_contra │ │ │ │ - 0x00d6bf30 73744761 6d6d613b 200a2020 756e6966 stGamma; . unif │ │ │ │ - 0x00d6bf40 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d6bf50 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ - 0x00d6bf60 666c6f61 7420755f 7a536361 6c653b20 float u_zScale; │ │ │ │ - 0x00d6bf70 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d6bf80 20755f69 6e746572 706f6c61 74696f6e u_interpolation │ │ │ │ - 0x00d6bf90 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d6bfa0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d6bfb0 73733b20 0a202075 6e69666f 726d2073 ss; . uniform s │ │ │ │ - 0x00d6bfc0 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ - 0x00d6bfd0 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00d6bfe0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d6bff0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d6c000 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ - 0x00d6c010 207b200a 20202369 66646566 20454e41 { . #ifdef ENA │ │ │ │ - 0x00d6c020 424c455f 56544620 0a202020 204c4f57 BLE_VTF . LOW │ │ │ │ - 0x00d6c030 5f502076 65633420 676c7970 68436f6c _P vec4 glyphCol │ │ │ │ - 0x00d6c040 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ - 0x00d6c050 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ - 0x00d6c060 50207665 63342067 6c797068 436f6c6f P vec4 glyphColo │ │ │ │ - 0x00d6c070 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00d6c080 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ - 0x00d6c090 6578436f 6f726429 3b200a20 2023656e exCoord); . #en │ │ │ │ - 0x00d6c0a0 64696620 0a202020 20666c6f 61742064 dif . float d │ │ │ │ - 0x00d6c0b0 69737420 3d207465 78747572 6528755f ist = texture(u_ │ │ │ │ - 0x00d6c0c0 6d61736b 5465782c 20765f6d 61736b54 maskTex, v_maskT │ │ │ │ - 0x00d6c0d0 6578436f 6f726429 2e723b20 0a202020 exCoord).r; . │ │ │ │ - 0x00d6c0e0 20666c6f 61742061 6c706861 203d2073 float alpha = s │ │ │ │ - 0x00d6c0f0 6d6f6f74 68737465 7028755f 636f6e74 moothstep(u_cont │ │ │ │ - 0x00d6c100 72617374 47616d6d 612e7820 2d20755f rastGamma.x - u_ │ │ │ │ - 0x00d6c110 636f6e74 72617374 47616d6d 612e792c contrastGamma.y, │ │ │ │ - 0x00d6c120 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ - 0x00d6c130 2e78202b 20755f63 6f6e7472 61737447 .x + u_contrastG │ │ │ │ - 0x00d6c140 616d6d61 2e792c20 64697374 29202a20 amma.y, dist) * │ │ │ │ - 0x00d6c150 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ - 0x00d6c160 676c7970 68436f6c 6f722e61 202a3d20 glyphColor.a *= │ │ │ │ - 0x00d6c170 616c7068 613b200a 20202020 765f4672 alpha; . v_Fr │ │ │ │ - 0x00d6c180 6167436f 6c6f7220 3d20676c 79706843 agColor = glyphC │ │ │ │ - 0x00d6c190 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d6c1a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6c1b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6c1c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6c1d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6c1e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6c1f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6c200 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6c210 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6c220 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6c230 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6c240 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6c250 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6c260 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6c270 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6c280 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6c290 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6c2a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6c2b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6c2c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6c2d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6c2e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6c2f0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d6c300 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d6c310 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d6c320 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00d6c330 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00d6c340 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00d6c350 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d6c360 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00d6c370 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00d6c380 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00d6c390 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00d6c3a0 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00d6c3b0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d6c3c0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00d6c3d0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d6c3e0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d6c3f0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d6c400 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d6c410 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d6c420 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d6c430 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d6c440 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d6c450 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d6c460 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d6c470 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d6c480 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d6c490 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d6c4a0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d6c4b0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d6c4c0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d6c4d0 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ - 0x00d6c4e0 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ - 0x00d6c4f0 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ - 0x00d6c500 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d6c510 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d6c520 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00d6c530 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00d6c540 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d6c550 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d6c560 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d6c570 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00d6c580 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d6c590 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d6c5a0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00d6c5b0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d6c5c0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00d6c5d0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00d6c5e0 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00d6c5f0 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00d6c600 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00d6c610 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00d6c620 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d6c630 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00d6c640 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d6c650 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00d6c660 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00d6c670 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00d6c680 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00d6c690 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00d6c6a0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00d6c6b0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d6c6c0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00d6c6d0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00d6c6e0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d6c6f0 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00d6c700 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00d6c710 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00d6c720 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00d6c730 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d6c740 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d6c750 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d6c760 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00d6c770 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00d6c780 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00d6c790 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00d6c7a0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d6c7b0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d6c7c0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d6c7d0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00d6c7e0 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00d6c7f0 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00d6c800 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00d6c810 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00d6c820 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00d6c830 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00d6c840 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00d6c850 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00d6c860 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d6c870 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00d6c880 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00d6c890 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00d6c8a0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00d6c8b0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d6c8c0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00d6c8d0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00d6c8e0 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00d6c8f0 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00d6c900 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00d6c910 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d6c920 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00d6c930 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00d6c940 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d6c950 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00d6c960 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d6c970 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00d6c980 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00d6c990 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00d6c9a0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00d6c9b0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00d6c9c0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00d6c9d0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00d6c9e0 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00d6c9f0 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00d6ca00 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00d6ca10 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00d6ca20 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00d6ca30 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00d6ca40 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00d6ca50 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00d6ca60 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00d6ca70 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d6ca80 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00d6ca90 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00d6caa0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00d6cab0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00d6cac0 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ - 0x00d6cad0 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ - 0x00d6cae0 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ - 0x00d6caf0 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ - 0x00d6cb00 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ - 0x00d6cb10 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00d6cb20 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d6cb30 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ - 0x00d6cb40 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00d6cb50 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d6cb60 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d6cb70 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00d6cb80 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00d6cb90 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00d6cba0 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ - 0x00d6cbb0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00d6cbc0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00d6cbd0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00d6cbe0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d6cbf0 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ - 0x00d6cc00 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ - 0x00d6cc10 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d6cc20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6cc30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6cc40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6cc50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6cc60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6cc70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6cc80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6cc90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6cca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6ccb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6ccc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6ccd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6cce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6ccf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6cd00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6cd10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6cd20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6cd30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6cd40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6cd50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6cd60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6cd70 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d6cd80 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d6cd90 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d6cda0 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00d6cdb0 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00d6cdc0 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00d6cdd0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d6cde0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00d6cdf0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00d6ce00 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00d6ce10 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00d6ce20 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00d6ce30 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d6ce40 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00d6ce50 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d6ce60 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d6ce70 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d6ce80 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d6ce90 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d6cea0 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d6ceb0 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d6cec0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d6ced0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d6cee0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d6cef0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d6cf00 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d6cf10 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d6cf20 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d6cf30 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d6cf40 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d6cf50 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d6cf60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d6cf70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d6cf80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d6cf90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d6cfa0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d6cfb0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d6cfc0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d6cfd0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d6cfe0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d6cff0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d6d000 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d6d010 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d6d020 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d6d030 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d6d040 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d6d050 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d6d060 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d6d070 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d6d080 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d6d090 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d6d0a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d6d0b0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d6d0c0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d6d0d0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d6d0e0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d6d0f0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d6d100 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d6d110 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d6d120 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d6d130 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d6d140 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d6d150 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d6d160 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d6d170 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d6d180 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d6d190 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d6d1a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d6d1b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d6d1c0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d6d1d0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d6d1e0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d6d1f0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d6d200 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d6d210 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d6d220 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d6d230 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d6d240 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d6d250 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d6d260 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d6d270 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d6d280 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d6d290 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d6d2a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d6d2b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d6d2c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d6d2d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d6d2e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d6d2f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d6d300 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d6d310 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d6d320 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d6d330 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d6d340 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d6d350 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d6d360 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d6d370 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d6d380 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d6d390 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d6d3a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d6d3b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d6d3c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d6d3d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d6d3e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d6d3f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d6d400 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d6d410 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d6d420 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d6d430 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d6d440 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d6d450 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d6d460 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d6d470 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d6d480 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d6d490 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d6d4a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d6d4b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d6d4c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d6d4d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d6d4e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d6d4f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d6d500 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00d6d510 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00d6d520 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00d6d530 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00d6d540 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00d6d550 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00d6d560 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d6d570 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00d6d580 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00d6d590 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d6d5a0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00d6d5b0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d6d5c0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00d6d5d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d6d5e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d6d5f0 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00d6d600 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00d6d610 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00d6d620 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00d6d630 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00d6d640 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00d6d650 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00d6d660 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ - 0x00d6d670 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ - 0x00d6d680 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ - 0x00d6d690 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d6d6a0 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00d6d6b0 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00d6d6c0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d6d6d0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d6d6e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6d6f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6d700 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6d710 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6d720 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6d730 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6d740 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6d750 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6d760 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6d770 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6d780 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6d790 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6d7a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6d7b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6d7c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6d7d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6d7e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6d7f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6d800 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6d810 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6d820 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6d830 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d6d840 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d6d850 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00d6d860 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00d6d870 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00d6d880 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00d6d890 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00d6d8a0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00d6d8b0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d6d8c0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d6d8d0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d6d8e0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d6d8f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d6d900 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d6d910 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d6d920 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d6d930 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d6d940 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d6d950 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d6d960 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d6d970 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d6d980 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d6d990 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d6d9a0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d6d9b0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d6d9c0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d6d9d0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d6d9e0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d6d9f0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d6da00 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d6da10 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d6da20 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ - 0x00d6da30 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ - 0x00d6da40 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00d6da50 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ - 0x00d6da60 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ - 0x00d6da70 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ - 0x00d6da80 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ - 0x00d6da90 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d6daa0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d6dab0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d6dac0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d6dad0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d6dae0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d6daf0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d6db00 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d6db10 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d6db20 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d6db30 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d6db40 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d6db50 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d6db60 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d6db70 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d6db80 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d6db90 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d6dba0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d6dbb0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d6dbc0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d6dbd0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d6dbe0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d6dbf0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d6dc00 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d6dc10 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d6dc20 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d6dc30 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d6dc40 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d6dc50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d6dc60 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d6dc70 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d6dc80 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d6dc90 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d6dca0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d6dcb0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d6dcc0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d6dcd0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d6dce0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d6dcf0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d6dd00 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d6dd10 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d6dd20 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d6dd30 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d6dd40 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d6dd50 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d6dd60 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d6dd70 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d6dd80 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d6dd90 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d6dda0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d6ddb0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d6ddc0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d6ddd0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d6dde0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d6ddf0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d6de00 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d6de10 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d6de20 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d6de30 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d6de40 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d6de50 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d6de60 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d6de70 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d6de80 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d6de90 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d6dea0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d6deb0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d6dec0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d6ded0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d6dee0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d6def0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d6df00 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d6df10 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d6df20 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d6df30 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d6df40 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d6df50 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d6df60 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d6df70 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d6df80 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d6df90 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d6dfa0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d6dfb0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d6dfc0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d6dfd0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d6dfe0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d6dff0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d6e000 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d6e010 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d6e020 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ - 0x00d6e030 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ - 0x00d6e040 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ - 0x00d6e050 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ - 0x00d6e060 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ - 0x00d6e070 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ - 0x00d6e080 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ - 0x00d6e090 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ - 0x00d6e0a0 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ - 0x00d6e0b0 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ - 0x00d6e0c0 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ - 0x00d6e0d0 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ - 0x00d6e0e0 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ - 0x00d6e0f0 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ - 0x00d6e100 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ - 0x00d6e110 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ - 0x00d6e120 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ - 0x00d6e130 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ - 0x00d6e140 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ - 0x00d6e150 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d6e160 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d6e170 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ - 0x00d6e180 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d6e190 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d6e1a0 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ - 0x00d6e1b0 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ - 0x00d6e1c0 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ - 0x00d6e1d0 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ - 0x00d6e1e0 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ - 0x00d6e1f0 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ - 0x00d6e200 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d6e210 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ - 0x00d6e220 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d6e230 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ - 0x00d6e240 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ - 0x00d6e250 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ - 0x00d6e260 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ - 0x00d6e270 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ - 0x00d6e280 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ - 0x00d6e290 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ - 0x00d6e2a0 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ - 0x00d6e2b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d6e2c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6e2d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6e2e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6e2f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6e300 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6e310 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6e320 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6e330 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6e340 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6e350 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6e360 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6e370 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6e380 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6e390 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6e3a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6e3b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6e3c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6e3d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6e3e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6e3f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6e400 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6e410 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d6e420 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d6e430 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00d6e440 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00d6e450 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00d6e460 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00d6e470 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00d6e480 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00d6e490 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d6e4a0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d6e4b0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d6e4c0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d6e4d0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d6e4e0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d6e4f0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d6e500 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d6e510 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d6e520 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d6e530 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d6e540 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d6e550 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d6e560 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d6e570 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d6e580 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d6e590 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d6e5a0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d6e5b0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d6e5c0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d6e5d0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d6e5e0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d6e5f0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d6e600 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ - 0x00d6e610 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ - 0x00d6e620 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00d6e630 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ - 0x00d6e640 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ - 0x00d6e650 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d6e660 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d6e670 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00d6e680 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d6e690 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d6e6a0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d6e6b0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d6e6c0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00d6e6d0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d6e6e0 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00d6e6f0 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00d6e700 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d6e710 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d6e720 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00d6e730 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d6e740 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d6e750 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00d6e760 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00d6e770 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d6e780 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00d6e790 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00d6e7a0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d6e7b0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00d6e7c0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00d6e7d0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d6e7e0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d6e7f0 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00d6e800 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d6e810 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00d6e820 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00d6e830 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d6e840 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00d6e850 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00d6e860 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00d6e870 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00d6e880 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d6e890 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d6e8a0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d6e8b0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00d6e8c0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00d6e8d0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00d6e8e0 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00d6e8f0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d6e900 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00d6e910 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00d6e920 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d6e930 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00d6e940 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00d6e950 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d6e960 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00d6e970 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00d6e980 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00d6e990 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d6e9a0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00d6e9b0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00d6e9c0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00d6e9d0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00d6e9e0 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00d6e9f0 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00d6ea00 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d6ea10 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00d6ea20 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00d6ea30 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00d6ea40 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00d6ea50 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00d6ea60 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d6ea70 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00d6ea80 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00d6ea90 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00d6eaa0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00d6eab0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00d6eac0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00d6ead0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00d6eae0 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00d6eaf0 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00d6eb00 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00d6eb10 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00d6eb20 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00d6eb30 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00d6eb40 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00d6eb50 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00d6eb60 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00d6eb70 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d6eb80 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00d6eb90 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00d6eba0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00d6ebb0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00d6ebc0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d6ebd0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00d6ebe0 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ - 0x00d6ebf0 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ - 0x00d6ec00 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ - 0x00d6ec10 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ - 0x00d6ec20 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ - 0x00d6ec30 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ - 0x00d6ec40 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ - 0x00d6ec50 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ - 0x00d6ec60 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ - 0x00d6ec70 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ - 0x00d6ec80 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00d6ec90 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ - 0x00d6eca0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00d6ecb0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00d6ecc0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00d6ecd0 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00d6ece0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d6ecf0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d6ed00 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d6ed10 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00d6ed20 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00d6ed30 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d6ed40 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00d6ed50 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d6ed60 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d6ed70 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00d6ed80 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00d6ed90 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00d6eda0 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ - 0x00d6edb0 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ - 0x00d6edc0 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ - 0x00d6edd0 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ - 0x00d6ede0 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ - 0x00d6edf0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00d6ee00 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ - 0x00d6ee10 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00d6ee20 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ - 0x00d6ee30 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00d6ee40 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d6ee50 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ - 0x00d6ee60 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d6ee70 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ - 0x00d6ee80 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ - 0x00d6ee90 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ - 0x00d6eea0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6eeb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6eec0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6eed0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6eee0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6eef0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6ef00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6ef10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6ef20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6ef30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6ef40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6ef50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6ef60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6ef70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6ef80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6ef90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6efa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6efb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6efc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6efd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6efe0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d6eff0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d6f000 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d6f010 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d6f020 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d6f030 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d6f040 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d6f050 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d6f060 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ - 0x00d6f070 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ - 0x00d6f080 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00d6f090 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ - 0x00d6f0a0 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ - 0x00d6f0b0 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ - 0x00d6f0c0 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ - 0x00d6f0d0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d6f0e0 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ - 0x00d6f0f0 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ - 0x00d6f100 6d207665 63322075 5f706f73 6974696f m vec2 u_positio │ │ │ │ - 0x00d6f110 6e3b200a 2020756e 69666f72 6d20666c n; . uniform fl │ │ │ │ - 0x00d6f120 6f617420 755f6973 4f75746c 696e6550 oat u_isOutlineP │ │ │ │ - 0x00d6f130 6173733b 200a2020 756e6966 6f726d20 ass; . uniform │ │ │ │ - 0x00d6f140 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d6f150 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d6f160 7420755f 6c656e67 74683b20 0a202075 t u_length; . u │ │ │ │ - 0x00d6f170 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d6f180 20755f6d 61736b54 65783b20 0a202063 u_maskTex; . c │ │ │ │ - 0x00d6f190 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d6f1a0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d6f1b0 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ - 0x00d6f1c0 61696e28 29200a20 207b200a 20202369 ain() . { . #i │ │ │ │ - 0x00d6f1d0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d6f1e0 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ - 0x00d6f1f0 676c7970 68436f6c 6f72203d 20765f63 glyphColor = v_c │ │ │ │ - 0x00d6f200 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ - 0x00d6f210 20202020 4c4f575f 50207665 63342067 LOW_P vec4 g │ │ │ │ - 0x00d6f220 6c797068 436f6c6f 72203d20 74657874 lyphColor = text │ │ │ │ - 0x00d6f230 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d6f240 765f636f 6c6f7254 6578436f 6f726429 v_colorTexCoord) │ │ │ │ - 0x00d6f250 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d6f260 20666c6f 61742064 69737420 3d207465 float dist = te │ │ │ │ - 0x00d6f270 78747572 6528755f 6d61736b 5465782c xture(u_maskTex, │ │ │ │ - 0x00d6f280 20765f6d 61736b54 6578436f 6f726429 v_maskTexCoord) │ │ │ │ - 0x00d6f290 2e723b20 0a202020 20666c6f 61742061 .r; . float a │ │ │ │ - 0x00d6f2a0 6c706861 203d2073 6d6f6f74 68737465 lpha = smoothste │ │ │ │ - 0x00d6f2b0 7028755f 636f6e74 72617374 47616d6d p(u_contrastGamm │ │ │ │ - 0x00d6f2c0 612e7820 2d20755f 636f6e74 72617374 a.x - u_contrast │ │ │ │ - 0x00d6f2d0 47616d6d 612e792c 20755f63 6f6e7472 Gamma.y, u_contr │ │ │ │ - 0x00d6f2e0 61737447 616d6d61 2e78202b 20755f63 astGamma.x + u_c │ │ │ │ - 0x00d6f2f0 6f6e7472 61737447 616d6d61 2e792c20 ontrastGamma.y, │ │ │ │ - 0x00d6f300 64697374 29202a20 755f6f70 61636974 dist) * u_opacit │ │ │ │ - 0x00d6f310 793b200a 20202020 676c7970 68436f6c y; . glyphCol │ │ │ │ - 0x00d6f320 6f722e61 202a3d20 616c7068 613b200a or.a *= alpha; . │ │ │ │ - 0x00d6f330 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ - 0x00d6f340 3d20676c 79706843 6f6c6f72 3b200a20 = glyphColor; . │ │ │ │ - 0x00d6f350 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d6f360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6f370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6f380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6f390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6f3a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6f3b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6f3c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6f3d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6f3e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6f3f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6f400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6f410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d6f420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d6f430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d6f440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d6f450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d6f460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d6f470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d6f480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d6f490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d6f4a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d6f4b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d6f4c0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d6f4d0 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ - 0x00d6f4e0 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ - 0x00d6f4f0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d6f500 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ - 0x00d6f510 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ - 0x00d6f520 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d6f530 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d6f540 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d6f550 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d6f560 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d6f570 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d6f580 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d6f590 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d6f5a0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d6f5b0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d6f5c0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d6f5d0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d6f5e0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d6f5f0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d6f600 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d6f610 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00d6f620 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d6f630 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d6f640 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00d6f650 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d6f660 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d6f670 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ - 0x00d6f680 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d6f690 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d6f6a0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d6f6b0 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ - 0x00d6f6c0 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ - 0x00d6f6d0 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ - 0x00d6f6e0 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ - 0x00d6f6f0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d6f700 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d6f710 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d6f720 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d6f730 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d6f740 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d6f750 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d6f760 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d6f770 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d6f780 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d6f790 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d6f7a0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d6f7b0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d6f7c0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d6f7d0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d6f7e0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d6f7f0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d6f800 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d6f810 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d6f820 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d6f830 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d6f840 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d6f850 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d6f860 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d6f870 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d6f880 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d6f890 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d6f8a0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d6f8b0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d6f8c0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d6f8d0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d6f8e0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d6f8f0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d6f900 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d6f910 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d6f920 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d6f930 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d6f940 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d6f950 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d6f960 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d6f970 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d6f980 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d6f990 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d6f9a0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d6f9b0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d6f9c0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d6f9d0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d6f9e0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d6f9f0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d6fa00 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d6fa10 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d6fa20 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d6fa30 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d6fa40 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d6fa50 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d6fa60 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d6fa70 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d6fa80 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d6fa90 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d6faa0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d6fab0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d6fac0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d6fad0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d6fae0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d6faf0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d6fb00 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d6fb10 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d6fb20 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d6fb30 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d6fb40 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d6fb50 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d6fb60 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d6fb70 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d6fb80 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d6fb90 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d6fba0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d6fbb0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d6fbc0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d6fbd0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d6fbe0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d6fbf0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d6fc00 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d6fc10 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d6fc20 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d6fc30 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d6fc40 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d6fc50 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d6fc60 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d6fc70 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d6fc80 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ - 0x00d6fc90 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ - 0x00d6fca0 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ - 0x00d6fcb0 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ - 0x00d6fcc0 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ - 0x00d6fcd0 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ - 0x00d6fce0 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ - 0x00d6fcf0 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ - 0x00d6fd00 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ - 0x00d6fd10 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ - 0x00d6fd20 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ - 0x00d6fd30 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ - 0x00d6fd40 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ - 0x00d6fd50 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ - 0x00d6fd60 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ - 0x00d6fd70 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00d6fd80 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ - 0x00d6fd90 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ - 0x00d6fda0 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00d6fdb0 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00d6fdc0 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00d6fdd0 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00d6fde0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d6fdf0 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00d6fe00 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00d6fe10 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00d6fe20 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ - 0x00d6fe30 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ - 0x00d6fe40 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ - 0x00d6fe50 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ - 0x00d6fe60 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ - 0x00d6fe70 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ - 0x00d6fe80 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00d6fe90 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ - 0x00d6fea0 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ - 0x00d6feb0 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ - 0x00d6fec0 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ - 0x00d6fed0 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ - 0x00d6fee0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d6fef0 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00d6ff00 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00d6ff10 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d6ff20 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d6ff30 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d6ff40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d6ff50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d6ff60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d6ff70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d6ff80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d6ff90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d6ffa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d6ffb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d6ffc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d6ffd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d6ffe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d6fff0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d70000 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d70010 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d70020 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d70030 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d70040 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d70050 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d70060 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d70070 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d70080 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d70090 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d700a0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d700b0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d700c0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d700d0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d700e0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d700f0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d70100 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d70110 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d70120 69666f72 6d207665 63322075 5f636f6e iform vec2 u_con │ │ │ │ - 0x00d70130 74726173 7447616d 6d613b20 0a202075 trastGamma; . u │ │ │ │ - 0x00d70140 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ - 0x00d70150 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ - 0x00d70160 726d2066 6c6f6174 20755f7a 5363616c rm float u_zScal │ │ │ │ - 0x00d70170 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ - 0x00d70180 6f617420 755f696e 74657270 6f6c6174 oat u_interpolat │ │ │ │ - 0x00d70190 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d701a0 666c6f61 7420755f 69734f75 746c696e float u_isOutlin │ │ │ │ - 0x00d701b0 65506173 733b200a 2020756e 69666f72 ePass; . unifor │ │ │ │ - 0x00d701c0 6d207361 6d706c65 72324420 755f636f m sampler2D u_co │ │ │ │ - 0x00d701d0 6c6f7254 65783b20 0a202063 6f6e7374 lorTex; . const │ │ │ │ - 0x00d701e0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d701f0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d70200 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ - 0x00d70210 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d70220 2066696e 616c436f 6c6f7220 3d207465 finalColor = te │ │ │ │ - 0x00d70230 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00d70240 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ - 0x00d70250 6473293b 200a2020 20206669 6e616c43 ds); . finalC │ │ │ │ - 0x00d70260 6f6c6f72 2e61202a 3d20755f 6f706163 olor.a *= u_opac │ │ │ │ - 0x00d70270 6974793b 200a2020 2020765f 46726167 ity; . v_Frag │ │ │ │ - 0x00d70280 436f6c6f 72203d20 66696e61 6c436f6c Color = finalCol │ │ │ │ - 0x00d70290 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d702a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d702b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d702c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d702d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d702e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d702f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d70300 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d70310 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d70320 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d70330 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d70340 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d70350 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d70360 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d70370 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d70380 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d70390 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d703a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d703b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d703c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d703d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d703e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d703f0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d70400 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d70410 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d70420 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d70430 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d70440 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d70450 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d70460 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d70470 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d70480 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d70490 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d704a0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d704b0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d704c0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d704d0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d704e0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d704f0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d70500 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d70510 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d70520 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d70530 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d70540 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d70550 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d70560 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d70570 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d70580 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d70590 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d705a0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d705b0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d705c0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d705d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d705e0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d705f0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d70600 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d70610 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d70620 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d70630 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d70640 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d70650 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d70660 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d70670 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d70680 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d70690 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d706a0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d706b0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d706c0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d706d0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d706e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d706f0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d70700 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d70710 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d70720 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d70730 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d70740 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d70750 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d70760 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d70770 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d70780 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d70790 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d707a0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d707b0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d707c0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d707d0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d707e0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d707f0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d70800 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d70810 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d70820 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d70830 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d70840 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d70850 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d70860 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d70870 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d70880 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d70890 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d708a0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d708b0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d708c0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d708d0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d708e0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d708f0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d70900 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d70910 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d70920 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d70930 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d70940 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d70950 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d70960 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d70970 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d70980 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d70990 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d709a0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d709b0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d709c0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d709d0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d709e0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d709f0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d70a00 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d70a10 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d70a20 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d70a30 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d70a40 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d70a50 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d70a60 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d70a70 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d70a80 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d70a90 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d70aa0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d70ab0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d70ac0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d70ad0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d70ae0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d70af0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00d70b00 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00d70b10 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d70b20 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00d70b30 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ - 0x00d70b40 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ - 0x00d70b50 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00d70b60 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00d70b70 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ - 0x00d70b80 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ - 0x00d70b90 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d70ba0 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ - 0x00d70bb0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00d70bc0 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00d70bd0 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00d70be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d70bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d70c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d70c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d70c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d70c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d70c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d70c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d70c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d70c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d70c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d70c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d70ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d70cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d70cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d70cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d70ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d70cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d70d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d70d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d70d20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d70d30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d70d40 7264733b 200a2020 696e2066 6c6f6174 rds; . in float │ │ │ │ - 0x00d70d50 20765f69 6e74656e 73697479 3b200a20 v_intensity; . │ │ │ │ - 0x00d70d60 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ - 0x00d70d70 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d70d80 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d70d90 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d70da0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d70db0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d70dc0 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d70dd0 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d70de0 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d70df0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d70e00 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d70e10 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d70e20 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d70e30 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d70e40 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d70e50 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d70e60 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d70e70 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d70e80 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d70e90 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d70ea0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d70eb0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d70ec0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d70ed0 0a202020 20766563 34206669 6e616c43 . vec4 finalC │ │ │ │ - 0x00d70ee0 6f6c6f72 203d2076 65633428 74657874 olor = vec4(text │ │ │ │ - 0x00d70ef0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d70f00 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d70f10 292e7267 622c2075 5f6f7061 63697479 ).rgb, u_opacity │ │ │ │ - 0x00d70f20 293b200a 20202020 765f4672 6167436f ); . v_FragCo │ │ │ │ - 0x00d70f30 6c6f7220 3d207665 63342828 765f696e lor = vec4((v_in │ │ │ │ - 0x00d70f40 74656e73 69747920 2a20302e 32202b20 tensity * 0.2 + │ │ │ │ - 0x00d70f50 302e3829 202a2066 696e616c 436f6c6f 0.8) * finalColo │ │ │ │ - 0x00d70f60 722e7267 622c2066 696e616c 436f6c6f r.rgb, finalColo │ │ │ │ - 0x00d70f70 722e6129 3b200a20 207d200a 00000000 r.a); . } ..... │ │ │ │ - 0x00d70f80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d70f90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d70fa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d70fb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d70fc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d70fd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d70fe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d70ff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d71000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d71010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d71020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d71030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d71040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d71050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d71060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d71070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d71080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d71090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d710a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d710b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d710c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d710d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d710e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d710f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d71100 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d71110 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d71120 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d71130 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d71140 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d71150 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d71160 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d71170 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d71180 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d71190 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d711a0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d711b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d711c0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d711d0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d711e0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d711f0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d71200 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d71210 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d71220 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d71230 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d71240 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d71250 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d71260 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d71270 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d71280 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d71290 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d712a0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d712b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d712c0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d712d0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d712e0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d712f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d71300 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d71310 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d71320 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d71330 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d71340 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d71350 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d71360 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d71370 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d71380 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d71390 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d713a0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d713b0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d713c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d713d0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d713e0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d713f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d71400 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d71410 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d71420 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d71430 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d71440 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d71450 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d71460 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d71470 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d71480 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d71490 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d714a0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d714b0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d714c0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d714d0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d714e0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d714f0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d71500 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d71510 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d71520 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d71530 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d71540 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d71550 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d71560 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d71570 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d71580 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d71590 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d715a0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d715b0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d715c0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d715d0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d715e0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d715f0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d71600 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d71610 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d71620 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d71630 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d71640 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d71650 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d71660 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d71670 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d71680 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d71690 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d716a0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d716b0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d716c0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d716d0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d716e0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d716f0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d71700 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d71710 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d71720 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d71730 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d71740 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d71750 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d71760 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d71770 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d71780 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d71790 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d717a0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d717b0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d717c0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d717d0 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ - 0x00d717e0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ - 0x00d717f0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00d71800 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00d71810 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00d71820 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00d71830 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d71840 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d71850 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d71860 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00d71870 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00d71880 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d71890 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00d718a0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d718b0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d718c0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00d718d0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00d718e0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00d718f0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00d71900 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00d71910 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00d71920 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d71930 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d71940 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d71950 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d71960 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d71970 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d71980 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d71990 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d719a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d719b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d719c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d719d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d719e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d719f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d71a00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d71a10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d71a20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d71a30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d71a40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d71a50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d71a60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d71a70 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d71a80 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d71a90 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d71aa0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d71ab0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d71ac0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d71ad0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d71ae0 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ - 0x00d71af0 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ - 0x00d71b00 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ - 0x00d71b10 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d71b20 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d71b30 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ - 0x00d71b40 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d71b50 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d71b60 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ - 0x00d71b70 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00d71b80 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ - 0x00d71b90 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d71ba0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d71bb0 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ - 0x00d71bc0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d71bd0 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ - 0x00d71be0 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ - 0x00d71bf0 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ - 0x00d71c00 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ - 0x00d71c10 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ - 0x00d71c20 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ - 0x00d71c30 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d71c40 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d71c50 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d71c60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d71c70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d71c80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d71c90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d71ca0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d71cb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d71cc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d71cd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d71ce0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d71cf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d71d00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d71d10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d71d20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d71d30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d71d40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d71d50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d71d60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d71d70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d71d80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d71d90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d71da0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d71db0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d71dc0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d71dd0 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ - 0x00d71de0 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ - 0x00d71df0 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ - 0x00d71e00 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d71e10 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d71e20 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d71e30 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d71e40 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d71e50 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d71e60 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00d71e70 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d71e80 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d71e90 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00d71ea0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d71eb0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d71ec0 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ - 0x00d71ed0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d71ee0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d71ef0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00d71f00 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d71f10 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d71f20 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d71f30 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d71f40 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00d71f50 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d71f60 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00d71f70 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00d71f80 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00d71f90 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d71fa0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00d71fb0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d71fc0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d71fd0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d71fe0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00d71ff0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d72000 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00d72010 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00d72020 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d72030 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00d72040 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00d72050 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00d72060 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d72070 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00d72080 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00d72090 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00d720a0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00d720b0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d720c0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00d720d0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00d720e0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00d720f0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d72100 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d72110 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d72120 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d72130 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00d72140 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00d72150 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00d72160 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00d72170 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d72180 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00d72190 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00d721a0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d721b0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00d721c0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00d721d0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d721e0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00d721f0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00d72200 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d72210 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d72220 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00d72230 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00d72240 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00d72250 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00d72260 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00d72270 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00d72280 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d72290 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00d722a0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d722b0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00d722c0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00d722d0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00d722e0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d722f0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00d72300 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00d72310 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00d72320 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00d72330 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00d72340 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00d72350 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00d72360 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00d72370 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00d72380 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00d72390 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00d723a0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d723b0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00d723c0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d723d0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00d723e0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00d723f0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d72400 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00d72410 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00d72420 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00d72430 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d72440 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d72450 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00d72460 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ - 0x00d72470 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ - 0x00d72480 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ - 0x00d72490 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00d724a0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00d724b0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d724c0 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ - 0x00d724d0 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ - 0x00d724e0 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ - 0x00d724f0 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ - 0x00d72500 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ - 0x00d72510 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ - 0x00d72520 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ - 0x00d72530 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d72540 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00d72550 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ - 0x00d72560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d72570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d72580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d72590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d725a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d725b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d725c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d725d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d725e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d725f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d72600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d72610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d72620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d72630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d72640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d72650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d72660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d72670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d72680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d72690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d726a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d726b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d726c0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d726d0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d726e0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d726f0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d72700 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d72710 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d72720 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d72730 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d72740 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ - 0x00d72750 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00d72760 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ - 0x00d72770 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ - 0x00d72780 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ - 0x00d72790 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d727a0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d727b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d727c0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d727d0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ - 0x00d727e0 75743b20 0a202075 6e69666f 726d2073 ut; . uniform s │ │ │ │ - 0x00d727f0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ - 0x00d72800 5465783b 200a2020 636f6e73 7420666c Tex; . const fl │ │ │ │ - 0x00d72810 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00d72820 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00d72830 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d72840 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ - 0x00d72850 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ - 0x00d72860 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ - 0x00d72870 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ - 0x00d72880 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ - 0x00d72890 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ - 0x00d728a0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00d728b0 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ - 0x00d728c0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d728d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d728e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d728f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d72900 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d72910 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d72920 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d72930 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d72940 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d72950 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d72960 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d72970 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d72980 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d72990 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d729a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d729b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d729c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d729d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d729e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d729f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d72a00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d72a10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d72a20 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d72a30 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00d72a40 6f6c6f72 5465783b 200a2020 696e2076 olorTex; . in v │ │ │ │ - 0x00d72a50 65633320 765f7465 78436f6f 7264733b ec3 v_texCoords; │ │ │ │ - 0x00d72a60 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d72a70 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ - 0x00d72a80 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d72a90 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d72aa0 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d72ab0 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ - 0x00d72ac0 46726167 436f6c6f 72203d20 74657874 FragColor = text │ │ │ │ - 0x00d72ad0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d72ae0 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ - 0x00d72af0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d72b00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d72b10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d72b20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d72b30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d72b40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d72b50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d72b60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d72b70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d72b80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d72b90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d72ba0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d72bb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d72bc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d72bd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d72be0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d72bf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d72c00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d72c10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d72c20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d72c30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d72c40 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ - 0x00d72c50 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ - 0x00d72c60 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ - 0x00d72c70 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ - 0x00d72c80 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ - 0x00d72c90 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ - 0x00d72ca0 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ - 0x00d72cb0 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ - 0x00d72cc0 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ - 0x00d72cd0 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ - 0x00d72ce0 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ - 0x00d72cf0 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ - 0x00d72d00 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d72d10 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00d72d20 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d72d30 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d72d40 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d72d50 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00d72d60 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00d72d70 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00d72d80 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00d72d90 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00d72da0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d72db0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d72dc0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d72dd0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00d72de0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d72df0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d72e00 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00d72e10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d72e20 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00d72e30 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00d72e40 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00d72e50 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00d72e60 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00d72e70 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00d72e80 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d72e90 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00d72ea0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00d72eb0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00d72ec0 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00d72ed0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00d72ee0 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00d72ef0 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00d72f00 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00d72f10 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d72f20 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00d72f30 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00d72f40 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d72f50 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00d72f60 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00d72f70 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00d72f80 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00d72f90 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d72fa0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d72fb0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d72fc0 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00d72fd0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00d72fe0 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00d72ff0 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00d73000 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d73010 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d73020 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d73030 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00d73040 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00d73050 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00d73060 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00d73070 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00d73080 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00d73090 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d730a0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00d730b0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00d730c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d730d0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00d730e0 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00d730f0 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00d73100 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00d73110 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d73120 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00d73130 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00d73140 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00d73150 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00d73160 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00d73170 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d73180 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00d73190 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00d731a0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00d731b0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00d731c0 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00d731d0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00d731e0 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00d731f0 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00d73200 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00d73210 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00d73220 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00d73230 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00d73240 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00d73250 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00d73260 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00d73270 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00d73280 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d73290 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00d732a0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00d732b0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00d732c0 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00d732d0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d732e0 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00d732f0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d73300 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ - 0x00d73310 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ - 0x00d73320 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ - 0x00d73330 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ - 0x00d73340 293b200a 2020200a 20202020 76656334 ); . . vec4 │ │ │ │ - 0x00d73350 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ - 0x00d73360 78203d20 755f7469 6c65436f 6f726473 x = u_tileCoords │ │ │ │ - 0x00d73370 4d696e4d 61785b67 6c5f496e 7374616e MinMax[gl_Instan │ │ │ │ - 0x00d73380 63654944 5d3b200a 20202020 76656332 ceID]; . vec2 │ │ │ │ - 0x00d73390 20776f72 6c64506f 73203d20 6d697828 worldPos = mix( │ │ │ │ - 0x00d733a0 74696c65 436f6f72 64734d69 6e4d6178 tileCoordsMinMax │ │ │ │ - 0x00d733b0 2e78792c 2074696c 65436f6f 7264734d .xy, tileCoordsM │ │ │ │ - 0x00d733c0 696e4d61 782e7a77 2c207175 61645665 inMax.zw, quadVe │ │ │ │ - 0x00d733d0 72746578 293b200a 20202020 76656334 rtex); . vec4 │ │ │ │ - 0x00d733e0 20706f73 203d2076 65633428 776f726c pos = vec4(worl │ │ │ │ - 0x00d733f0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00d73400 2a20755f 6d6f6465 6c566965 77202a20 * u_modelView * │ │ │ │ - 0x00d73410 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d73420 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00d73430 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d73440 666f726d 28706f73 2c20755f 7069766f form(pos, u_pivo │ │ │ │ - 0x00d73450 74547261 6e73666f 726d2c20 302e3029 tTransform, 0.0) │ │ │ │ - 0x00d73460 3b200a20 20200a20 20202076 5f746578 ; . . v_tex │ │ │ │ - 0x00d73470 436f6f72 6473203d 20766563 33287175 Coords = vec3(qu │ │ │ │ - 0x00d73480 61645665 72746578 2c20666c 6f617428 adVertex, float( │ │ │ │ - 0x00d73490 755f7465 78747572 65496e64 65785b67 u_textureIndex[g │ │ │ │ - 0x00d734a0 6c5f496e 7374616e 63654944 5d29293b l_InstanceID])); │ │ │ │ - 0x00d734b0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d734c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d734d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d734e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d734f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d73500 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d73510 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d73520 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d73530 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d73540 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d73550 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d73560 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d73570 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d73580 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d73590 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d735a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d735b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d735c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d735d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d735e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d735f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d73600 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d73610 726d204d 45444955 4d5f5020 73616d70 rm MEDIUM_P samp │ │ │ │ - 0x00d73620 6c657232 44417272 61792075 5f636f6c ler2DArray u_col │ │ │ │ - 0x00d73630 6f725465 783b200a 2020696e 20766563 orTex; . in vec │ │ │ │ - 0x00d73640 3320765f 74657843 6f6f7264 733b200a 3 v_texCoords; . │ │ │ │ - 0x00d73650 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00d73660 67436f6c 6f723b20 0a202063 6f6e7374 gColor; . const │ │ │ │ - 0x00d73670 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d73680 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d73690 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ - 0x00d736a0 29200a20 207b200a 20202020 765f4672 ) . { . v_Fr │ │ │ │ - 0x00d736b0 6167436f 6c6f7220 3d207465 78747572 agColor = textur │ │ │ │ - 0x00d736c0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d736d0 74657843 6f6f7264 73293b20 0a20207d texCoords); . } │ │ │ │ - 0x00d736e0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d736f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d73700 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d73710 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d73720 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d73730 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d73740 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d73750 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d73760 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d73770 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d73780 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d73790 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d737a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d737b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d737c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d737d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d737e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d737f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d73800 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d73810 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d73820 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d73830 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d73840 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d73850 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d73860 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ - 0x00d73870 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d73880 2020696e 20666c6f 61742076 5f68616c in float v_hal │ │ │ │ - 0x00d73890 664c656e 6774683b 200a2020 6f757420 fLength; . out │ │ │ │ - 0x00d738a0 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ - 0x00d738b0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d738c0 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00d738d0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d738e0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d738f0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d73900 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00d73910 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d73920 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ - 0x00d73930 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d73940 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00d73950 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d73960 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ - 0x00d73970 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d73980 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ - 0x00d73990 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d739a0 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ - 0x00d739b0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d739c0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00d739d0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d739e0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d739f0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00d73a00 32442075 5f6d6173 6b546578 3b200a20 2D u_maskTex; . │ │ │ │ - 0x00d73a10 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ - 0x00d73a20 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ - 0x00d73a30 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ - 0x00d73a40 6f6e7374 20666c6f 6174206b 4f75746c onst float kOutl │ │ │ │ - 0x00d73a50 696e6554 68726573 686f6c64 31203d20 ineThreshold1 = │ │ │ │ - 0x00d73a60 302e383b 200a2020 636f6e73 7420666c 0.8; . const fl │ │ │ │ - 0x00d73a70 6f617420 6b4f7574 6c696e65 54687265 oat kOutlineThre │ │ │ │ - 0x00d73a80 73686f6c 6432203d 20302e35 3b200a20 shold2 = 0.5; . │ │ │ │ - 0x00d73a90 20636f6e 73742066 6c6f6174 206b4d61 const float kMa │ │ │ │ - 0x00d73aa0 736b4f70 61636974 79203d20 302e373b skOpacity = 0.7; │ │ │ │ - 0x00d73ab0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d73ac0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d73ad0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d73ae0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d73af0 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ - 0x00d73b00 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ - 0x00d73b10 72546578 2c20765f 636f6c6f 72546578 rTex, v_colorTex │ │ │ │ - 0x00d73b20 436f6f72 64293b20 0a202020 20666c6f Coord); . flo │ │ │ │ - 0x00d73b30 61742061 6c706861 436f6465 203d2063 at alphaCode = c │ │ │ │ - 0x00d73b40 6f6c6f72 2e613b20 0a202020 20766563 olor.a; . vec │ │ │ │ - 0x00d73b50 34206d61 736b203d 20746578 74757265 4 mask = texture │ │ │ │ - 0x00d73b60 28755f6d 61736b54 65782c20 765f6d61 (u_maskTex, v_ma │ │ │ │ - 0x00d73b70 736b5465 78436f6f 7264293b 200a2020 skTexCoord); . │ │ │ │ - 0x00d73b80 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ - 0x00d73b90 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ - 0x00d73ba0 6d6f6f74 68737465 70286b41 6e746961 moothstep(kAntia │ │ │ │ - 0x00d73bb0 6c696173 696e6754 68726573 686f6c64 liasingThreshold │ │ │ │ - 0x00d73bc0 2c20312e 302c2061 62732876 5f68616c , 1.0, abs(v_hal │ │ │ │ - 0x00d73bd0 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ - 0x00d73be0 20636f6c 6f722e72 6762203d 206d6978 color.rgb = mix │ │ │ │ - 0x00d73bf0 28636f6c 6f722e72 67622c20 6d61736b (color.rgb, mask │ │ │ │ - 0x00d73c00 2e726762 202a206d 69782875 5f6c6967 .rgb * mix(u_lig │ │ │ │ - 0x00d73c10 68744172 726f7743 6f6c6f72 2e726762 htArrowColor.rgb │ │ │ │ - 0x00d73c20 2c20755f 6461726b 4172726f 77436f6c , u_darkArrowCol │ │ │ │ - 0x00d73c30 6f722e72 67622c20 73746570 28616c70 or.rgb, step(alp │ │ │ │ - 0x00d73c40 6861436f 64652c20 302e3629 292c206d haCode, 0.6)), m │ │ │ │ - 0x00d73c50 61736b2e 61202a20 6b4d6173 6b4f7061 ask.a * kMaskOpa │ │ │ │ - 0x00d73c60 63697479 293b200a 20202020 69662028 city); . if ( │ │ │ │ - 0x00d73c70 755f6f75 746c696e 65203e20 302e3029 u_outline > 0.0) │ │ │ │ - 0x00d73c80 200a2020 20207b20 0a202020 20202063 . { . c │ │ │ │ - 0x00d73c90 6f6c6f72 2e726762 203d206d 69782863 olor.rgb = mix(c │ │ │ │ - 0x00d73ca0 6f6c6f72 2e726762 2c20755f 6f75746c olor.rgb, u_outl │ │ │ │ - 0x00d73cb0 696e6543 6f6c6f72 2e726762 2c207374 ineColor.rgb, st │ │ │ │ - 0x00d73cc0 6570286b 4f75746c 696e6554 68726573 ep(kOutlineThres │ │ │ │ - 0x00d73cd0 686f6c64 312c2061 62732876 5f68616c hold1, abs(v_hal │ │ │ │ - 0x00d73ce0 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ - 0x00d73cf0 20202063 6f6c6f72 2e726762 203d206d color.rgb = m │ │ │ │ - 0x00d73d00 69782863 6f6c6f72 2e726762 2c20755f ix(color.rgb, u_ │ │ │ │ - 0x00d73d10 6f75746c 696e6543 6f6c6f72 2e726762 outlineColor.rgb │ │ │ │ - 0x00d73d20 2c20736d 6f6f7468 73746570 286b4f75 , smoothstep(kOu │ │ │ │ - 0x00d73d30 746c696e 65546872 6573686f 6c64322c tlineThreshold2, │ │ │ │ - 0x00d73d40 206b4f75 746c696e 65546872 6573686f kOutlineThresho │ │ │ │ - 0x00d73d50 6c64312c 20616273 28765f68 616c664c ld1, abs(v_halfL │ │ │ │ - 0x00d73d60 656e6774 68292929 3b200a20 2020207d ength))); . } │ │ │ │ - 0x00d73d70 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ - 0x00d73d80 72203d20 636f6c6f 723b200a 20207d20 r = color; . } │ │ │ │ - 0x00d73d90 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d73da0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d73db0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d73dc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d73dd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d73de0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d73df0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d73e00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d73e10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d73e20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d73e30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d73e40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d73e50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d73e60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d73e70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d73e80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d73e90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d73ea0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d73eb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d73ec0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d73ed0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d73ee0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d73ef0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d73f00 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d73f10 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d73f20 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d73f30 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d73f40 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00d73f50 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ - 0x00d73f60 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ - 0x00d73f70 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ - 0x00d73f80 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ - 0x00d73f90 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d73fa0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d73fb0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d73fc0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d73fd0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d73fe0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d73ff0 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ - 0x00d74000 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d74010 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ - 0x00d74020 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d74030 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ - 0x00d74040 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d74050 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ - 0x00d74060 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d74070 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ - 0x00d74080 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ - 0x00d74090 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ - 0x00d740a0 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ - 0x00d740b0 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ - 0x00d740c0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d740d0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d740e0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d740f0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00d74100 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00d74110 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00d74120 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00d74130 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00d74140 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d74150 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d74160 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00d74170 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00d74180 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00d74190 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d741a0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00d741b0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00d741c0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00d741d0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00d741e0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00d741f0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00d74200 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d74210 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00d74220 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00d74230 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d74240 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00d74250 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00d74260 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d74270 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00d74280 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00d74290 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00d742a0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d742b0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00d742c0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00d742d0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00d742e0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d742f0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d74300 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d74310 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d74320 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00d74330 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00d74340 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00d74350 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00d74360 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00d74370 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d74380 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d74390 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00d743a0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00d743b0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00d743c0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00d743d0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00d743e0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00d743f0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d74400 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00d74410 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d74420 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00d74430 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00d74440 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00d74450 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00d74460 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00d74470 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d74480 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00d74490 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00d744a0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00d744b0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00d744c0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00d744d0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d744e0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00d744f0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00d74500 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00d74510 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00d74520 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00d74530 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00d74540 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00d74550 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00d74560 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00d74570 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00d74580 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00d74590 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00d745a0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00d745b0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00d745c0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00d745d0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00d745e0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00d745f0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d74600 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00d74610 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00d74620 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00d74630 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d74640 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00d74650 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d74660 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ - 0x00d74670 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ - 0x00d74680 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00d74690 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00d746a0 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00d746b0 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00d746c0 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00d746d0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d746e0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00d746f0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00d74700 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00d74710 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ - 0x00d74720 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ - 0x00d74730 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ - 0x00d74740 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ - 0x00d74750 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ - 0x00d74760 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00d74770 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ - 0x00d74780 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d74790 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d747a0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00d747b0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d747c0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00d747d0 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ - 0x00d747e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d747f0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d74800 20202020 20202020 20202020 20755f6d u_m │ │ │ │ - 0x00d74810 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ - 0x00d74820 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ - 0x00d74830 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ - 0x00d74840 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ - 0x00d74850 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ - 0x00d74860 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ - 0x00d74870 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ - 0x00d74880 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ - 0x00d74890 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ - 0x00d748a0 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00d748b0 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ - 0x00d748c0 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ - 0x00d748d0 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ - 0x00d748e0 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ - 0x00d748f0 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ - 0x00d74900 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ - 0x00d74910 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ - 0x00d74920 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ - 0x00d74930 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ - 0x00d74940 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ - 0x00d74950 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00d74960 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ - 0x00d74970 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ - 0x00d74980 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ - 0x00d74990 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ - 0x00d749a0 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ - 0x00d749b0 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ - 0x00d749c0 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00d749d0 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ - 0x00d749e0 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d749f0 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ - 0x00d74a00 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ - 0x00d74a10 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ - 0x00d74a20 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ - 0x00d74a30 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ - 0x00d74a40 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d74a50 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ - 0x00d74a60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d74a70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d74a80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d74a90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d74aa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d74ab0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d74ac0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d74ad0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d74ae0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d74af0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d74b00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d74b10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d74b20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d74b30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d74b40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d74b50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d74b60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d74b70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d74b80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d74b90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d74ba0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d74bb0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d74bc0 72643b20 0a202069 6e207665 63332076 rd; . in vec3 v │ │ │ │ - 0x00d74bd0 5f726164 6975733b 200a2020 6f757420 _radius; . out │ │ │ │ - 0x00d74be0 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ - 0x00d74bf0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d74c00 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00d74c10 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d74c20 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d74c30 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d74c40 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00d74c50 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d74c60 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ - 0x00d74c70 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d74c80 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00d74c90 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d74ca0 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ - 0x00d74cb0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d74cc0 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ - 0x00d74cd0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d74ce0 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ - 0x00d74cf0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d74d00 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00d74d10 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d74d20 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d74d30 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ - 0x00d74d40 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ - 0x00d74d50 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ - 0x00d74d60 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d74d70 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d74d80 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ - 0x00d74d90 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00d74da0 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ - 0x00d74db0 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ - 0x00d74dc0 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00d74dd0 293b200a 20202020 666c6f61 7420736d ); . float sm │ │ │ │ - 0x00d74de0 616c6c52 61646975 73203d20 765f7261 allRadius = v_ra │ │ │ │ - 0x00d74df0 64697573 2e7a202a 206b416e 7469616c dius.z * kAntial │ │ │ │ - 0x00d74e00 69617369 6e675468 72657368 6f6c643b iasingThreshold; │ │ │ │ - 0x00d74e10 200a2020 2020666c 6f617420 73746570 . float step │ │ │ │ - 0x00d74e20 56616c75 65203d20 736d6f6f 74687374 Value = smoothst │ │ │ │ - 0x00d74e30 65702873 6d616c6c 52616469 7573202a ep(smallRadius * │ │ │ │ - 0x00d74e40 20736d61 6c6c5261 64697573 2c20765f smallRadius, v_ │ │ │ │ - 0x00d74e50 72616469 75732e7a 202a2076 5f726164 radius.z * v_rad │ │ │ │ - 0x00d74e60 6975732e 7a2c200a 20202020 20202020 ius.z, . │ │ │ │ - 0x00d74e70 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d74e80 20202020 20202020 20765f72 61646975 v_radiu │ │ │ │ - 0x00d74e90 732e7820 2a20765f 72616469 75732e78 s.x * v_radius.x │ │ │ │ - 0x00d74ea0 202b2076 5f726164 6975732e 79202a20 + v_radius.y * │ │ │ │ - 0x00d74eb0 765f7261 64697573 2e79293b 200a2020 v_radius.y); . │ │ │ │ - 0x00d74ec0 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ - 0x00d74ed0 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ - 0x00d74ee0 74657056 616c7565 293b200a 20202020 tepValue); . │ │ │ │ - 0x00d74ef0 69662028 636f6c6f 722e6120 3c20302e if (color.a < 0. │ │ │ │ - 0x00d74f00 30312920 0a202020 20202064 69736361 01) . disca │ │ │ │ - 0x00d74f10 72643b20 0a202020 20765f46 72616743 rd; . v_FragC │ │ │ │ - 0x00d74f20 6f6c6f72 203d2063 6f6c6f72 3b200a20 olor = color; . │ │ │ │ - 0x00d74f30 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d74f40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d74f50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d74f60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d74f70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d74f80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d74f90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d74fa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d74fb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d74fc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d74fd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d74fe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d74ff0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d75000 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d75010 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d75020 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d75030 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d75040 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d75050 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d75060 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d75070 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d75080 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d75090 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d750a0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d750b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d750c0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d750d0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d750e0 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00d750f0 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ - 0x00d75100 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ - 0x00d75110 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d75120 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d75130 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d75140 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d75150 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d75160 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d75170 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ - 0x00d75180 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d75190 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00d751a0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d751b0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ - 0x00d751c0 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00d751d0 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ - 0x00d751e0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d751f0 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ - 0x00d75200 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d75210 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00d75220 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d75230 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d75240 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d75250 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d75260 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d75270 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d75280 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d75290 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d752a0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d752b0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d752c0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d752d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d752e0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d752f0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d75300 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d75310 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d75320 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d75330 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d75340 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d75350 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d75360 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d75370 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d75380 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d75390 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d753a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d753b0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d753c0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d753d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d753e0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d753f0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d75400 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d75410 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d75420 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d75430 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d75440 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d75450 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d75460 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d75470 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d75480 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d75490 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d754a0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d754b0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d754c0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d754d0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d754e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d754f0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d75500 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d75510 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d75520 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d75530 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d75540 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d75550 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d75560 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d75570 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d75580 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d75590 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d755a0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d755b0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d755c0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d755d0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d755e0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d755f0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d75600 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d75610 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d75620 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d75630 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d75640 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d75650 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d75660 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d75670 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d75680 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d75690 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d756a0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d756b0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d756c0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d756d0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d756e0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d756f0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d75700 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d75710 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d75720 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d75730 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d75740 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d75750 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d75760 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d75770 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d75780 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d75790 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d757a0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d757b0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d757c0 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ - 0x00d757d0 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ - 0x00d757e0 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ - 0x00d757f0 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ - 0x00d75800 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ - 0x00d75810 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ - 0x00d75820 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d75830 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ - 0x00d75840 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ - 0x00d75850 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ - 0x00d75860 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ - 0x00d75870 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00d75880 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ - 0x00d75890 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ - 0x00d758a0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00d758b0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d758c0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00d758d0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00d758e0 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00d758f0 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ - 0x00d75900 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ - 0x00d75910 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ - 0x00d75920 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d75930 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ - 0x00d75940 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ - 0x00d75950 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d75960 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ - 0x00d75970 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ - 0x00d75980 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d75990 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d759a0 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00d759b0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ - 0x00d759c0 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ - 0x00d759d0 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ - 0x00d759e0 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ - 0x00d759f0 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ - 0x00d75a00 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ - 0x00d75a10 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ - 0x00d75a20 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ - 0x00d75a30 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d75a40 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ - 0x00d75a50 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ - 0x00d75a60 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ - 0x00d75a70 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ - 0x00d75a80 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ - 0x00d75a90 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ - 0x00d75aa0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00d75ab0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d75ac0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d75ad0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d75ae0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d75af0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d75b00 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d75b10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d75b20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d75b30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d75b40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d75b50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d75b60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d75b70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d75b80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d75b90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d75ba0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d75bb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d75bc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d75bd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d75be0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d75bf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d75c00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d75c10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d75c20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d75c30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d75c40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d75c50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d75c60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d75c70 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d75c80 72643b20 0a20206f 75742076 65633420 rd; . out vec4 │ │ │ │ - 0x00d75c90 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00d75ca0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d75cb0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d75cc0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d75cd0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d75ce0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d75cf0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d75d00 666f726d 20766563 3420755f 74726166 form vec4 u_traf │ │ │ │ - 0x00d75d10 66696350 6172616d 733b200a 2020756e ficParams; . un │ │ │ │ - 0x00d75d20 69666f72 6d207665 63342075 5f6f7574 iform vec4 u_out │ │ │ │ - 0x00d75d30 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ - 0x00d75d40 69666f72 6d207665 63342075 5f6c6967 iform vec4 u_lig │ │ │ │ - 0x00d75d50 68744172 726f7743 6f6c6f72 3b200a20 htArrowColor; . │ │ │ │ - 0x00d75d60 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00d75d70 6461726b 4172726f 77436f6c 6f723b20 darkArrowColor; │ │ │ │ - 0x00d75d80 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d75d90 20755f6f 75746c69 6e653b20 0a202075 u_outline; . u │ │ │ │ - 0x00d75da0 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ - 0x00d75db0 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ - 0x00d75dc0 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00d75dd0 6f6c6f72 5465783b 200a2020 636f6e73 olorTex; . cons │ │ │ │ - 0x00d75de0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d75df0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d75e00 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ - 0x00d75e10 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00d75e20 3420636f 6c6f7220 3d207465 78747572 4 color = textur │ │ │ │ - 0x00d75e30 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d75e40 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ - 0x00d75e50 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ - 0x00d75e60 203d2076 65633428 636f6c6f 722e7267 = vec4(color.rg │ │ │ │ - 0x00d75e70 622c2075 5f6f7061 63697479 293b200a b, u_opacity); . │ │ │ │ - 0x00d75e80 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00d75e90 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d75ea0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d75eb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d75ec0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d75ed0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d75ee0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d75ef0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d75f00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d75f10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d75f20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d75f30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d75f40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d75f50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d75f60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d75f70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d75f80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d75f90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d75fa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d75fb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d75fc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d75fd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d75fe0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d75ff0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d76000 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d76010 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ - 0x00d76020 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00d76030 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ - 0x00d76040 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d76050 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d76060 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d76070 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d76080 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d76090 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d760a0 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ - 0x00d760b0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d760c0 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ - 0x00d760d0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d760e0 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ - 0x00d760f0 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ - 0x00d76100 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ - 0x00d76110 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ - 0x00d76120 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ - 0x00d76130 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ - 0x00d76140 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d76150 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00d76160 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d76170 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d76180 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d76190 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d761a0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d761b0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d761c0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d761d0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d761e0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d761f0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d76200 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d76210 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d76220 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d76230 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d76240 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d76250 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d76260 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d76270 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d76280 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d76290 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d762a0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d762b0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d762c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d762d0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d762e0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d762f0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d76300 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d76310 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d76320 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d76330 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d76340 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d76350 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d76360 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d76370 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d76380 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d76390 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d763a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d763b0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d763c0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d763d0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d763e0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d763f0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d76400 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d76410 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d76420 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d76430 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d76440 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d76450 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d76460 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d76470 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d76480 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d76490 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d764a0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d764b0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d764c0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d764d0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d764e0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d764f0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d76500 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d76510 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d76520 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d76530 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d76540 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d76550 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d76560 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d76570 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d76580 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d76590 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d765a0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d765b0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d765c0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d765d0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d765e0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d765f0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d76600 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d76610 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d76620 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d76630 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d76640 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d76650 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d76660 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d76670 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d76680 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d76690 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d766a0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d766b0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d766c0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d766d0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d766e0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d766f0 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00d76700 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00d76710 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00d76720 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00d76730 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00d76740 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ - 0x00d76750 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d76760 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ - 0x00d76770 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ - 0x00d76780 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d76790 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d767a0 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00d767b0 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ - 0x00d767c0 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00d767d0 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00d767e0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d767f0 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ - 0x00d76800 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d76810 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d76820 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d76830 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d76840 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d76850 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d76860 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d76870 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d76880 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d76890 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d768a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d768b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d768c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d768d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d768e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d768f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d76900 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d76910 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d76920 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d76930 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d76940 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d76950 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d76960 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d76970 63342076 5f636f6c 6f723b20 0a20206f c4 v_color; . o │ │ │ │ - 0x00d76980 75742076 65633420 765f4672 6167436f ut vec4 v_FragCo │ │ │ │ - 0x00d76990 6c6f723b 200a2020 636f6e73 7420666c lor; . const fl │ │ │ │ - 0x00d769a0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00d769b0 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00d769c0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d769d0 20207b20 0a202020 20765f46 72616743 { . v_FragC │ │ │ │ - 0x00d769e0 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ - 0x00d769f0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d76a00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d76a10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d76a20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d76a30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d76a40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d76a50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d76a60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d76a70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d76a80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d76a90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d76aa0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d76ab0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d76ac0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d76ad0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d76ae0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d76af0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d76b00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d76b10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d76b20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d76b30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d76b40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d76b50 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d76b60 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d76b70 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d76b80 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d76b90 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ - 0x00d76ba0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d76bb0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d76bc0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d76bd0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d76be0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d76bf0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d76c00 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ - 0x00d76c10 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ - 0x00d76c20 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ - 0x00d76c30 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ - 0x00d76c40 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ - 0x00d76c50 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ - 0x00d76c60 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d76c70 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d76c80 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ - 0x00d76c90 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00d76ca0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00d76cb0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00d76cc0 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ - 0x00d76cd0 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ - 0x00d76ce0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d76cf0 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ - 0x00d76d00 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ - 0x00d76d10 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ - 0x00d76d20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d76d30 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ - 0x00d76d40 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ - 0x00d76d50 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d76d60 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ - 0x00d76d70 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ - 0x00d76d80 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ - 0x00d76d90 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d76da0 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ - 0x00d76db0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d76dc0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d76dd0 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ - 0x00d76de0 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ - 0x00d76df0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d76e00 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ - 0x00d76e10 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ - 0x00d76e20 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ - 0x00d76e30 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d76e40 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ - 0x00d76e50 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ - 0x00d76e60 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ - 0x00d76e70 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ - 0x00d76e80 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d76e90 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d76ea0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d76eb0 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ - 0x00d76ec0 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ - 0x00d76ed0 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ - 0x00d76ee0 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ - 0x00d76ef0 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ - 0x00d76f00 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ - 0x00d76f10 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d76f20 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ - 0x00d76f30 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ - 0x00d76f40 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ - 0x00d76f50 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ - 0x00d76f60 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ - 0x00d76f70 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ - 0x00d76f80 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ - 0x00d76f90 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ - 0x00d76fa0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d76fb0 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ - 0x00d76fc0 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ - 0x00d76fd0 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ - 0x00d76fe0 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ - 0x00d76ff0 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ - 0x00d77000 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ - 0x00d77010 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ - 0x00d77020 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ - 0x00d77030 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ - 0x00d77040 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ - 0x00d77050 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ - 0x00d77060 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d77070 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ - 0x00d77080 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ - 0x00d77090 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ - 0x00d770a0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00d770b0 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ - 0x00d770c0 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ - 0x00d770d0 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ - 0x00d770e0 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ - 0x00d770f0 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ - 0x00d77100 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ - 0x00d77110 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ - 0x00d77120 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ - 0x00d77130 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ - 0x00d77140 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ - 0x00d77150 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ - 0x00d77160 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ - 0x00d77170 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ - 0x00d77180 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d77190 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ - 0x00d771a0 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ - 0x00d771b0 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ - 0x00d771c0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d771d0 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ - 0x00d771e0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00d771f0 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ - 0x00d77200 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ - 0x00d77210 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00d77220 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d77230 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00d77240 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00d77250 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00d77260 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ - 0x00d77270 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ - 0x00d77280 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00d77290 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00d772a0 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ - 0x00d772b0 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ - 0x00d772c0 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ - 0x00d772d0 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ - 0x00d772e0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00d772f0 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ - 0x00d77300 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00d77310 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ - 0x00d77320 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d77330 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d77340 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d77350 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ - 0x00d77360 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ - 0x00d77370 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ - 0x00d77380 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00d77390 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00d773a0 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ - 0x00d773b0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00d773c0 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ - 0x00d773d0 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ - 0x00d773e0 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ - 0x00d773f0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d77400 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ - 0x00d77410 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ - 0x00d77420 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00d77430 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d77440 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d77450 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d77460 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d77470 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d77480 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d77490 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d774a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d774b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d774c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d774d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d774e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d774f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d77500 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d77510 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d77520 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d77530 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d77540 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d77550 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d77560 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d77570 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d77580 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d77590 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00d775a0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d775b0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d775c0 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ - 0x00d775d0 73742066 6c6f6174 20616150 6978656c st float aaPixel │ │ │ │ - 0x00d775e0 73436f75 6e74203d 20322e35 3b200a20 sCount = 2.5; . │ │ │ │ - 0x00d775f0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d77600 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d77610 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ - 0x00d77620 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d77630 20207665 63342066 696e616c 436f6c6f vec4 finalColo │ │ │ │ - 0x00d77640 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ - 0x00d77650 2020666c 6f617420 736d616c 6c526164 float smallRad │ │ │ │ - 0x00d77660 69757320 3d20765f 72616469 75732e7a ius = v_radius.z │ │ │ │ - 0x00d77670 202d2061 61506978 656c7343 6f756e74 - aaPixelsCount │ │ │ │ - 0x00d77680 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ - 0x00d77690 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ - 0x00d776a0 74657028 736d616c 6c526164 69757320 tep(smallRadius │ │ │ │ - 0x00d776b0 2a20736d 616c6c52 61646975 732c2076 * smallRadius, v │ │ │ │ - 0x00d776c0 5f726164 6975732e 7a202a20 765f7261 _radius.z * v_ra │ │ │ │ - 0x00d776d0 64697573 2e7a2c20 0a202020 20202020 dius.z, . │ │ │ │ - 0x00d776e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d776f0 20202020 20202020 20646f74 28765f72 dot(v_r │ │ │ │ - 0x00d77700 61646975 732e7879 2c20765f 72616469 adius.xy, v_radi │ │ │ │ - 0x00d77710 75732e78 7929293b 200a2020 20206669 us.xy)); . fi │ │ │ │ - 0x00d77720 6e616c43 6f6c6f72 2e61203d 2066696e nalColor.a = fin │ │ │ │ - 0x00d77730 616c436f 6c6f722e 61202a20 28312e30 alColor.a * (1.0 │ │ │ │ - 0x00d77740 202d2073 74657056 616c7565 293b200a - stepValue); . │ │ │ │ - 0x00d77750 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ - 0x00d77760 6f722e61 203c2030 2e303129 200a2020 or.a < 0.01) . │ │ │ │ - 0x00d77770 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ - 0x00d77780 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d77790 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d777a0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d777b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d777c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d777d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d777e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d777f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d77800 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d77810 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d77820 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d77830 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d77840 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d77850 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d77860 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d77870 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d77880 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d77890 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d778a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d778b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d778c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d778d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d778e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d778f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d77900 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d77910 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d77920 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d77930 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d77940 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d77950 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00d77960 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00d77970 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00d77980 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d77990 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d779a0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d779b0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d779c0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d779d0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d779e0 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ - 0x00d779f0 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ - 0x00d77a00 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ - 0x00d77a10 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ - 0x00d77a20 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ - 0x00d77a30 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d77a40 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d77a50 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d77a60 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d77a70 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d77a80 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d77a90 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d77aa0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d77ab0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d77ac0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d77ad0 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d77ae0 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d77af0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d77b00 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d77b10 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d77b20 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d77b30 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d77b40 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d77b50 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d77b60 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d77b70 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d77b80 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d77b90 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d77ba0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d77bb0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d77bc0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d77bd0 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d77be0 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d77bf0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d77c00 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d77c10 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d77c20 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d77c30 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d77c40 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d77c50 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d77c60 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d77c70 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d77c80 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d77c90 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d77ca0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d77cb0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d77cc0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d77cd0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d77ce0 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d77cf0 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d77d00 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d77d10 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d77d20 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d77d30 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d77d40 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d77d50 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d77d60 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d77d70 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d77d80 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d77d90 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d77da0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d77db0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d77dc0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d77dd0 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d77de0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d77df0 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d77e00 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d77e10 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d77e20 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d77e30 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d77e40 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d77e50 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d77e60 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d77e70 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d77e80 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d77e90 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d77ea0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d77eb0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d77ec0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d77ed0 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d77ee0 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d77ef0 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d77f00 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d77f10 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d77f20 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d77f30 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d77f40 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d77f50 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d77f60 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d77f70 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d77f80 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d77f90 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d77fa0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d77fb0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d77fc0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00d77fd0 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ - 0x00d77fe0 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ - 0x00d77ff0 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00d78000 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00d78010 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00d78020 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00d78030 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00d78040 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ - 0x00d78050 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ - 0x00d78060 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ - 0x00d78070 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ - 0x00d78080 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ - 0x00d78090 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ - 0x00d780a0 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ - 0x00d780b0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00d780c0 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ - 0x00d780d0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00d780e0 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ - 0x00d780f0 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ - 0x00d78100 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d78110 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d78120 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ - 0x00d78130 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ - 0x00d78140 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ - 0x00d78150 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ - 0x00d78160 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ - 0x00d78170 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ - 0x00d78180 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ - 0x00d78190 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ - 0x00d781a0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d781b0 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ - 0x00d781c0 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ - 0x00d781d0 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ - 0x00d781e0 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00d781f0 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ - 0x00d78200 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00d78210 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00d78220 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00d78230 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ - 0x00d78240 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ - 0x00d78250 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ - 0x00d78260 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ - 0x00d78270 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d78280 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d78290 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d782a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d782b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d782c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d782d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d782e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d782f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d78300 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d78310 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d78320 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d78330 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d78340 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d78350 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d78360 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d78370 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d78380 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d78390 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d783a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d783b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d783c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d783d0 63342076 5f6f6666 73657473 3b200a20 c4 v_offsets; . │ │ │ │ - 0x00d783e0 20696e20 76656334 20765f63 6f6c6f72 in vec4 v_color │ │ │ │ - 0x00d783f0 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00d78400 46726167 436f6c6f 723b200a 2020636f FragColor; . co │ │ │ │ - 0x00d78410 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d78420 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d78430 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d78440 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d78450 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ - 0x00d78460 20765f63 6f6c6f72 3b200a20 20202076 v_color; . v │ │ │ │ - 0x00d78470 65633220 72616469 75733b20 0a202020 ec2 radius; . │ │ │ │ - 0x00d78480 20726164 6975732e 78203d20 6d617828 radius.x = max( │ │ │ │ - 0x00d78490 302e302c 20616273 28765f6f 66667365 0.0, abs(v_offse │ │ │ │ - 0x00d784a0 74732e78 29202d20 765f6f66 66736574 ts.x) - v_offset │ │ │ │ - 0x00d784b0 732e7a29 3b200a20 20202072 61646975 s.z); . radiu │ │ │ │ - 0x00d784c0 732e7920 3d206d61 7828302e 302c2061 s.y = max(0.0, a │ │ │ │ - 0x00d784d0 62732876 5f6f6666 73657473 2e792920 bs(v_offsets.y) │ │ │ │ - 0x00d784e0 2d20765f 6f666673 6574732e 77293b20 - v_offsets.w); │ │ │ │ - 0x00d784f0 0a202020 20666c6f 6174206d 61785261 . float maxRa │ │ │ │ - 0x00d78500 64697573 203d2031 2e303b20 0a202020 dius = 1.0; . │ │ │ │ - 0x00d78510 20666c6f 61742061 61526164 69757320 float aaRadius │ │ │ │ - 0x00d78520 3d20302e 393b200a 20202020 666c6f61 = 0.9; . floa │ │ │ │ - 0x00d78530 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ - 0x00d78540 6f6f7468 73746570 28616152 61646975 oothstep(aaRadiu │ │ │ │ - 0x00d78550 73202a20 61615261 64697573 2c206d61 s * aaRadius, ma │ │ │ │ - 0x00d78560 78526164 69757320 2a206d61 78526164 xRadius * maxRad │ │ │ │ - 0x00d78570 6975732c 20646f74 28726164 6975732e ius, dot(radius. │ │ │ │ - 0x00d78580 78792c20 72616469 75732e78 7929293b xy, radius.xy)); │ │ │ │ - 0x00d78590 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ - 0x00d785a0 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ - 0x00d785b0 61202a20 28312e30 202d2073 74657056 a * (1.0 - stepV │ │ │ │ - 0x00d785c0 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ - 0x00d785d0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d785e0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d785f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d78600 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d78610 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d78620 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d78630 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d78640 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d78650 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d78660 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d78670 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d78680 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d78690 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d786a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d786b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d786c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d786d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d786e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d786f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d78700 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d78710 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d78720 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d78730 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d78740 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d78750 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d78760 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d78770 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d78780 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d78790 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ - 0x00d787a0 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ - 0x00d787b0 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ - 0x00d787c0 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d787d0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d787e0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d787f0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d78800 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d78810 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d78820 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ - 0x00d78830 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ - 0x00d78840 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ - 0x00d78850 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d78860 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ - 0x00d78870 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d78880 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d78890 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00d788a0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d788b0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d788c0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d788d0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d788e0 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00d788f0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d78900 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00d78910 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00d78920 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00d78930 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d78940 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00d78950 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d78960 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d78970 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d78980 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00d78990 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d789a0 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00d789b0 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00d789c0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d789d0 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00d789e0 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00d789f0 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00d78a00 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d78a10 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00d78a20 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00d78a30 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00d78a40 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00d78a50 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d78a60 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00d78a70 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00d78a80 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00d78a90 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d78aa0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d78ab0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d78ac0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d78ad0 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00d78ae0 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00d78af0 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00d78b00 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00d78b10 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d78b20 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00d78b30 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00d78b40 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d78b50 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00d78b60 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00d78b70 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d78b80 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00d78b90 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00d78ba0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d78bb0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d78bc0 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00d78bd0 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00d78be0 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00d78bf0 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00d78c00 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00d78c10 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00d78c20 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d78c30 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00d78c40 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d78c50 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00d78c60 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00d78c70 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00d78c80 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d78c90 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00d78ca0 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00d78cb0 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00d78cc0 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00d78cd0 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00d78ce0 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00d78cf0 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00d78d00 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00d78d10 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00d78d20 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00d78d30 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00d78d40 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d78d50 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00d78d60 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d78d70 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00d78d80 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00d78d90 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d78da0 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00d78db0 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00d78dc0 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00d78dd0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d78de0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d78df0 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00d78e00 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ - 0x00d78e10 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ - 0x00d78e20 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ - 0x00d78e30 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00d78e40 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ - 0x00d78e50 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ - 0x00d78e60 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ - 0x00d78e70 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ - 0x00d78e80 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ - 0x00d78e90 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d78ea0 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ - 0x00d78eb0 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ - 0x00d78ec0 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ - 0x00d78ed0 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ - 0x00d78ee0 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ - 0x00d78ef0 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ - 0x00d78f00 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ - 0x00d78f10 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ - 0x00d78f20 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ - 0x00d78f30 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ - 0x00d78f40 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d78f50 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d78f60 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d78f70 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ - 0x00d78f80 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ - 0x00d78f90 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ - 0x00d78fa0 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ - 0x00d78fb0 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ - 0x00d78fc0 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ - 0x00d78fd0 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ - 0x00d78fe0 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ - 0x00d78ff0 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ - 0x00d79000 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00d79010 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d79020 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d79030 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d79040 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d79050 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d79060 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d79070 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d79080 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d79090 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d790a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d790b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d790c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d790d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d790e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d790f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d79100 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d79110 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d79120 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d79130 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d79140 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d79150 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d79160 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d79170 63342076 5f746578 436f6f72 64733b20 c4 v_texCoords; │ │ │ │ - 0x00d79180 0a202069 6e207665 63342076 5f6d6173 . in vec4 v_mas │ │ │ │ - 0x00d79190 6b436f6c 6f723b20 0a20206f 75742076 kColor; . out v │ │ │ │ - 0x00d791a0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00d791b0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d791c0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00d791d0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d791e0 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ - 0x00d791f0 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ - 0x00d79200 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ - 0x00d79210 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00d79220 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ - 0x00d79230 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d79240 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ - 0x00d79250 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00d79260 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00d79270 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ - 0x00d79280 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ - 0x00d79290 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ - 0x00d792a0 6c696e65 50617373 3b200a20 20756e69 linePass; . uni │ │ │ │ - 0x00d792b0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00d792c0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ - 0x00d792d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d792e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d792f0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d79300 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d79310 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ - 0x00d79320 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d79330 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ - 0x00d79340 200a2020 20207665 63342062 67436f6c . vec4 bgCol │ │ │ │ - 0x00d79350 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d79360 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ - 0x00d79370 6f726473 2e7a7729 202a2076 65633428 ords.zw) * vec4( │ │ │ │ - 0x00d79380 765f6d61 736b436f 6c6f722e 78797a2c v_maskColor.xyz, │ │ │ │ - 0x00d79390 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d793a0 2066696e 616c436f 6c6f7220 3d206d69 finalColor = mi │ │ │ │ - 0x00d793b0 7828636f 6c6f722c 206d6978 28626743 x(color, mix(bgC │ │ │ │ - 0x00d793c0 6f6c6f72 2c20636f 6c6f722c 20636f6c olor, color, col │ │ │ │ - 0x00d793d0 6f722e61 292c2062 67436f6c 6f722e61 or.a), bgColor.a │ │ │ │ - 0x00d793e0 293b200a 20202020 66696e61 6c436f6c ); . finalCol │ │ │ │ - 0x00d793f0 6f722e61 203d2063 6c616d70 28636f6c or.a = clamp(col │ │ │ │ - 0x00d79400 6f722e61 202b2062 67436f6c 6f722e61 or.a + bgColor.a │ │ │ │ - 0x00d79410 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00d79420 6f706163 69747920 2a20765f 6d61736b opacity * v_mask │ │ │ │ - 0x00d79430 436f6c6f 722e773b 200a2020 20206966 Color.w; . if │ │ │ │ - 0x00d79440 20286669 6e616c43 6f6c6f72 2e61203c (finalColor.a < │ │ │ │ - 0x00d79450 20302e30 3129200a 20202020 20206469 0.01) . di │ │ │ │ - 0x00d79460 73636172 643b200a 20202020 765f4672 scard; . v_Fr │ │ │ │ - 0x00d79470 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d79480 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d79490 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d794a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d794b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d794c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d794d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d794e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d794f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d79500 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d79510 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d79520 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d79530 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d79540 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d79550 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d79560 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d79570 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d79580 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d79590 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d795a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d795b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d795c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d795d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d795e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d795f0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d79600 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d79610 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00d79620 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00d79630 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00d79640 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d79650 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00d79660 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00d79670 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00d79680 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d79690 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d796a0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d796b0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d796c0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d796d0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d796e0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d796f0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d79700 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d79710 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d79720 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d79730 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d79740 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d79750 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d79760 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d79770 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d79780 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d79790 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d797a0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d797b0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d797c0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d797d0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d797e0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d797f0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d79800 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d79810 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d79820 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d79830 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d79840 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d79850 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d79860 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d79870 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d79880 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d79890 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d798a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d798b0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d798c0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d798d0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d798e0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d798f0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d79900 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d79910 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d79920 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d79930 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d79940 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d79950 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d79960 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d79970 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d79980 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d79990 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d799a0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d799b0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d799c0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d799d0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d799e0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d799f0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d79a00 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d79a10 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d79a20 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d79a30 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d79a40 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d79a50 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d79a60 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d79a70 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d79a80 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d79a90 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d79aa0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d79ab0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d79ac0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d79ad0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d79ae0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d79af0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d79b00 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d79b10 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d79b20 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d79b30 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d79b40 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d79b50 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d79b60 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d79b70 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d79b80 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d79b90 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d79ba0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d79bb0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d79bc0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d79bd0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d79be0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d79bf0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d79c00 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d79c10 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d79c20 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d79c30 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d79c40 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d79c50 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d79c60 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d79c70 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d79c80 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d79c90 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d79ca0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d79cb0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d79cc0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d79cd0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d79ce0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d79cf0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d79d00 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d79d10 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d79d20 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00d79d30 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00d79d40 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00d79d50 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00d79d60 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00d79d70 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00d79d80 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00d79d90 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00d79da0 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ - 0x00d79db0 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ - 0x00d79dc0 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ - 0x00d79dd0 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ - 0x00d79de0 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ - 0x00d79df0 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ - 0x00d79e00 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ - 0x00d79e10 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00d79e20 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d79e30 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00d79e40 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ - 0x00d79e50 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d79e60 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d79e70 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ - 0x00d79e80 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ - 0x00d79e90 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ - 0x00d79ea0 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ - 0x00d79eb0 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ - 0x00d79ec0 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ - 0x00d79ed0 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ - 0x00d79ee0 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ - 0x00d79ef0 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ - 0x00d79f00 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ - 0x00d79f10 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ - 0x00d79f20 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ - 0x00d79f30 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ - 0x00d79f40 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ - 0x00d79f50 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ - 0x00d79f60 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d79f70 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d79f80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d79f90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d79fa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d79fb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d79fc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d79fd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d79fe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d79ff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d7a000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d7a010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d7a020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d7a030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d7a040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d7a050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d7a060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d7a070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d7a080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d7a090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d7a0a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d7a0b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d7a0c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d7a0d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d7a0e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d7a0f0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00d7a100 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00d7a110 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00d7a120 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d7a130 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00d7a140 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00d7a150 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00d7a160 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d7a170 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d7a180 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d7a190 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d7a1a0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d7a1b0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d7a1c0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d7a1d0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d7a1e0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d7a1f0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d7a200 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d7a210 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d7a220 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d7a230 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d7a240 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d7a250 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d7a260 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d7a270 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d7a280 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d7a290 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d7a2a0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d7a2b0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d7a2c0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d7a2d0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d7a2e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d7a2f0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d7a300 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d7a310 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d7a320 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d7a330 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d7a340 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d7a350 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d7a360 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d7a370 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d7a380 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d7a390 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d7a3a0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d7a3b0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d7a3c0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d7a3d0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d7a3e0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d7a3f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d7a400 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d7a410 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d7a420 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d7a430 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d7a440 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d7a450 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d7a460 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d7a470 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d7a480 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d7a490 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d7a4a0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d7a4b0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d7a4c0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d7a4d0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d7a4e0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d7a4f0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d7a500 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d7a510 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d7a520 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d7a530 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d7a540 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d7a550 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d7a560 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d7a570 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d7a580 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d7a590 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d7a5a0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d7a5b0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d7a5c0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d7a5d0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d7a5e0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d7a5f0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d7a600 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d7a610 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d7a620 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d7a630 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d7a640 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d7a650 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d7a660 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d7a670 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d7a680 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d7a690 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d7a6a0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d7a6b0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d7a6c0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d7a6d0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d7a6e0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d7a6f0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d7a700 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d7a710 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d7a720 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d7a730 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d7a740 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d7a750 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d7a760 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d7a770 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d7a780 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d7a790 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d7a7a0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d7a7b0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d7a7c0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d7a7d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d7a7e0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d7a7f0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d7a800 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00d7a810 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00d7a820 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00d7a830 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00d7a840 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00d7a850 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00d7a860 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00d7a870 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00d7a880 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ - 0x00d7a890 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ - 0x00d7a8a0 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00d7a8b0 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ - 0x00d7a8c0 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ - 0x00d7a8d0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d7a8e0 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ - 0x00d7a8f0 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ - 0x00d7a900 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ - 0x00d7a910 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ - 0x00d7a920 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ - 0x00d7a930 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d7a940 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ - 0x00d7a950 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ - 0x00d7a960 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ - 0x00d7a970 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ - 0x00d7a980 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ - 0x00d7a990 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ - 0x00d7a9a0 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ - 0x00d7a9b0 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ - 0x00d7a9c0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d7a9d0 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ - 0x00d7a9e0 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ - 0x00d7a9f0 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ - 0x00d7aa00 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ - 0x00d7aa10 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ - 0x00d7aa20 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ - 0x00d7aa30 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ - 0x00d7aa40 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ - 0x00d7aa50 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ - 0x00d7aa60 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ - 0x00d7aa70 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d52d10 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00d52d20 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ + 0x00d52d30 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ + 0x00d52d40 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ + 0x00d52d50 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ + 0x00d52d60 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00d52d70 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ + 0x00d52d80 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ + 0x00d52d90 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ + 0x00d52da0 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ + 0x00d52db0 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ + 0x00d52dc0 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ + 0x00d52dd0 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ + 0x00d52de0 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ + 0x00d52df0 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ + 0x00d52e00 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ + 0x00d52e10 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ + 0x00d52e20 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d52e30 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00d52e40 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d52e50 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00d52e60 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00d52e70 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00d52e80 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d52e90 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d52ea0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00d52eb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d52ec0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d52ed0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d52ee0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d52ef0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d52f00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d52f10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d52f20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d52f30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d52f40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d52f50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d52f60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d52f70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d52f80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d52f90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d52fa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d52fb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d52fc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d52fd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d52fe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d52ff0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d53000 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d53010 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d53020 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00d53030 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d53040 2020696e 20666c6f 61742076 5f68616c in float v_hal │ │ │ │ + 0x00d53050 664c656e 6774683b 200a2020 6f757420 fLength; . out │ │ │ │ + 0x00d53060 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00d53070 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d53080 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d53090 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d530a0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d530b0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d530c0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d530d0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d530e0 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00d530f0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d53100 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d53110 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d53120 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00d53130 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d53140 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00d53150 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d53160 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00d53170 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d53180 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d53190 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d531a0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d531b0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d531c0 32442075 5f6d6173 6b546578 3b200a20 2D u_maskTex; . │ │ │ │ + 0x00d531d0 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00d531e0 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00d531f0 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00d53200 6f6e7374 20666c6f 6174206b 4f75746c onst float kOutl │ │ │ │ + 0x00d53210 696e6554 68726573 686f6c64 31203d20 ineThreshold1 = │ │ │ │ + 0x00d53220 302e383b 200a2020 636f6e73 7420666c 0.8; . const fl │ │ │ │ + 0x00d53230 6f617420 6b4f7574 6c696e65 54687265 oat kOutlineThre │ │ │ │ + 0x00d53240 73686f6c 6432203d 20302e35 3b200a20 shold2 = 0.5; . │ │ │ │ + 0x00d53250 20636f6e 73742066 6c6f6174 206b4d61 const float kMa │ │ │ │ + 0x00d53260 736b4f70 61636974 79203d20 302e373b skOpacity = 0.7; │ │ │ │ + 0x00d53270 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d53280 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d53290 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d532a0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d532b0 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ + 0x00d532c0 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ + 0x00d532d0 72546578 2c20765f 636f6c6f 72546578 rTex, v_colorTex │ │ │ │ + 0x00d532e0 436f6f72 64293b20 0a202020 20666c6f Coord); . flo │ │ │ │ + 0x00d532f0 61742061 6c706861 436f6465 203d2063 at alphaCode = c │ │ │ │ + 0x00d53300 6f6c6f72 2e613b20 0a202020 20766563 olor.a; . vec │ │ │ │ + 0x00d53310 34206d61 736b203d 20746578 74757265 4 mask = texture │ │ │ │ + 0x00d53320 28755f6d 61736b54 65782c20 765f6d61 (u_maskTex, v_ma │ │ │ │ + 0x00d53330 736b5465 78436f6f 7264293b 200a2020 skTexCoord); . │ │ │ │ + 0x00d53340 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ + 0x00d53350 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ + 0x00d53360 6d6f6f74 68737465 70286b41 6e746961 moothstep(kAntia │ │ │ │ + 0x00d53370 6c696173 696e6754 68726573 686f6c64 liasingThreshold │ │ │ │ + 0x00d53380 2c20312e 302c2061 62732876 5f68616c , 1.0, abs(v_hal │ │ │ │ + 0x00d53390 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ + 0x00d533a0 20636f6c 6f722e72 6762203d 206d6978 color.rgb = mix │ │ │ │ + 0x00d533b0 28636f6c 6f722e72 67622c20 6d61736b (color.rgb, mask │ │ │ │ + 0x00d533c0 2e726762 202a206d 69782875 5f6c6967 .rgb * mix(u_lig │ │ │ │ + 0x00d533d0 68744172 726f7743 6f6c6f72 2e726762 htArrowColor.rgb │ │ │ │ + 0x00d533e0 2c20755f 6461726b 4172726f 77436f6c , u_darkArrowCol │ │ │ │ + 0x00d533f0 6f722e72 67622c20 73746570 28616c70 or.rgb, step(alp │ │ │ │ + 0x00d53400 6861436f 64652c20 302e3629 292c206d haCode, 0.6)), m │ │ │ │ + 0x00d53410 61736b2e 61202a20 6b4d6173 6b4f7061 ask.a * kMaskOpa │ │ │ │ + 0x00d53420 63697479 293b200a 20202020 69662028 city); . if ( │ │ │ │ + 0x00d53430 755f6f75 746c696e 65203e20 302e3029 u_outline > 0.0) │ │ │ │ + 0x00d53440 200a2020 20207b20 0a202020 20202063 . { . c │ │ │ │ + 0x00d53450 6f6c6f72 2e726762 203d206d 69782863 olor.rgb = mix(c │ │ │ │ + 0x00d53460 6f6c6f72 2e726762 2c20755f 6f75746c olor.rgb, u_outl │ │ │ │ + 0x00d53470 696e6543 6f6c6f72 2e726762 2c207374 ineColor.rgb, st │ │ │ │ + 0x00d53480 6570286b 4f75746c 696e6554 68726573 ep(kOutlineThres │ │ │ │ + 0x00d53490 686f6c64 312c2061 62732876 5f68616c hold1, abs(v_hal │ │ │ │ + 0x00d534a0 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ + 0x00d534b0 20202063 6f6c6f72 2e726762 203d206d color.rgb = m │ │ │ │ + 0x00d534c0 69782863 6f6c6f72 2e726762 2c20755f ix(color.rgb, u_ │ │ │ │ + 0x00d534d0 6f75746c 696e6543 6f6c6f72 2e726762 outlineColor.rgb │ │ │ │ + 0x00d534e0 2c20736d 6f6f7468 73746570 286b4f75 , smoothstep(kOu │ │ │ │ + 0x00d534f0 746c696e 65546872 6573686f 6c64322c tlineThreshold2, │ │ │ │ + 0x00d53500 206b4f75 746c696e 65546872 6573686f kOutlineThresho │ │ │ │ + 0x00d53510 6c64312c 20616273 28765f68 616c664c ld1, abs(v_halfL │ │ │ │ + 0x00d53520 656e6774 68292929 3b200a20 2020207d ength))); . } │ │ │ │ + 0x00d53530 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ + 0x00d53540 72203d20 636f6c6f 723b200a 20207d20 r = color; . } │ │ │ │ + 0x00d53550 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d53560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d53570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d53580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d53590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d535a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d535b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d535c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d535d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d535e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d535f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d53600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d53610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d53620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d53630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d53640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d53650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d53660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d53670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d53680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d53690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d536a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d536b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d536c0 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00d536d0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d536e0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d536f0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00d53700 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d53710 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d53720 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d53730 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d53740 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d53750 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d53760 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d53770 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d53780 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d53790 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d537a0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d537b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d537c0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d537d0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d537e0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d537f0 200a2020 756e6966 6f726d20 73616d70 . uniform samp │ │ │ │ + 0x00d53800 6c657232 4420755f 636f6c6f 72546578 ler2D u_colorTex │ │ │ │ + 0x00d53810 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00d53820 706c6572 32442075 5f6d6173 6b546578 pler2D u_maskTex │ │ │ │ + 0x00d53830 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d53840 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d53850 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d53860 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d53870 200a2020 20207665 63342063 6f6c6f72 . vec4 color │ │ │ │ + 0x00d53880 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ + 0x00d53890 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ + 0x00d538a0 78436f6f 7264293b 200a2020 2020666c xCoord); . fl │ │ │ │ + 0x00d538b0 6f617420 6d61736b 203d2074 65787475 oat mask = textu │ │ │ │ + 0x00d538c0 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ + 0x00d538d0 6d61736b 54657843 6f6f7264 292e723b maskTexCoord).r; │ │ │ │ + 0x00d538e0 200a2020 2020636f 6c6f722e 61203d20 . color.a = │ │ │ │ + 0x00d538f0 636f6c6f 722e6120 2a206d61 736b202a color.a * mask * │ │ │ │ + 0x00d53900 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00d53910 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ + 0x00d53920 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d53930 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d53940 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d53950 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d53960 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d53970 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d53980 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d53990 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d539a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d539b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d539c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d539d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d539e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d539f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d53a00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d53a10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d53a20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d53a30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d53a40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d53a50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d53a60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d53a70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d53a80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d53a90 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d53aa0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d53ab0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d53ac0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d53ad0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d53ae0 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00d53af0 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ + 0x00d53b00 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ + 0x00d53b10 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d53b20 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d53b30 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d53b40 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d53b50 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d53b60 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d53b70 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ + 0x00d53b80 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d53b90 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00d53ba0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d53bb0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ + 0x00d53bc0 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00d53bd0 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ + 0x00d53be0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d53bf0 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ + 0x00d53c00 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d53c10 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d53c20 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d53c30 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d53c40 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d53c50 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d53c60 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d53c70 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d53c80 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d53c90 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d53ca0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d53cb0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d53cc0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d53cd0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d53ce0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d53cf0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d53d00 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d53d10 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d53d20 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d53d30 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d53d40 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d53d50 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d53d60 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d53d70 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d53d80 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d53d90 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d53da0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d53db0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d53dc0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d53dd0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d53de0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d53df0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d53e00 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d53e10 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d53e20 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d53e30 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d53e40 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d53e50 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d53e60 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d53e70 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d53e80 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d53e90 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d53ea0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d53eb0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d53ec0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d53ed0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d53ee0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d53ef0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d53f00 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d53f10 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d53f20 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d53f30 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d53f40 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d53f50 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d53f60 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d53f70 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d53f80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d53f90 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d53fa0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d53fb0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d53fc0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d53fd0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d53fe0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d53ff0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d54000 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d54010 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d54020 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d54030 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d54040 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d54050 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d54060 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d54070 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d54080 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d54090 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d540a0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d540b0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d540c0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d540d0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d540e0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d540f0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d54100 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d54110 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d54120 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d54130 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d54140 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d54150 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d54160 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d54170 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d54180 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d54190 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d541a0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d541b0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d541c0 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ + 0x00d541d0 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ + 0x00d541e0 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ + 0x00d541f0 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ + 0x00d54200 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ + 0x00d54210 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ + 0x00d54220 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d54230 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ + 0x00d54240 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ + 0x00d54250 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ + 0x00d54260 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ + 0x00d54270 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00d54280 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ + 0x00d54290 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ + 0x00d542a0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00d542b0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d542c0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00d542d0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00d542e0 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00d542f0 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ + 0x00d54300 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ + 0x00d54310 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ + 0x00d54320 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d54330 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ + 0x00d54340 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ + 0x00d54350 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d54360 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ + 0x00d54370 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ + 0x00d54380 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d54390 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d543a0 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00d543b0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ + 0x00d543c0 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ + 0x00d543d0 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ + 0x00d543e0 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ + 0x00d543f0 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ + 0x00d54400 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ + 0x00d54410 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ + 0x00d54420 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ + 0x00d54430 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d54440 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ + 0x00d54450 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ + 0x00d54460 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ + 0x00d54470 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ + 0x00d54480 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ + 0x00d54490 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ + 0x00d544a0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d544b0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d544c0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d544d0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d544e0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d544f0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d54500 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d54510 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d54520 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d54530 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d54540 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d54550 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d54560 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d54570 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d54580 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d54590 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d545a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d545b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d545c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d545d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d545e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d545f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d54600 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d54610 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d54620 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d54630 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d54640 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d54650 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d54660 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d54670 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ + 0x00d54680 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ + 0x00d54690 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ + 0x00d546a0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d546b0 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d546c0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d546d0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d546e0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d546f0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d54700 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d54710 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d54720 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d54730 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d54740 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ + 0x00d54750 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d54760 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d54770 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d54780 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ + 0x00d54790 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ + 0x00d547a0 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ + 0x00d547b0 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ + 0x00d547c0 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ + 0x00d547d0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d547e0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d547f0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d54800 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d54810 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d54820 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d54830 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d54840 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d54850 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d54860 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d54870 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d54880 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d54890 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d548a0 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d548b0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d548c0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d548d0 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d548e0 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00d548f0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d54900 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d54910 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d54920 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d54930 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d54940 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d54950 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d54960 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d54970 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d54980 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d54990 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d549a0 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d549b0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d549c0 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d549d0 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d549e0 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d549f0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d54a00 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d54a10 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d54a20 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d54a30 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d54a40 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d54a50 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d54a60 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d54a70 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d54a80 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d54a90 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d54aa0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d54ab0 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d54ac0 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d54ad0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d54ae0 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d54af0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d54b00 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d54b10 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d54b20 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d54b30 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d54b40 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d54b50 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d54b60 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d54b70 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d54b80 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d54b90 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d54ba0 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d54bb0 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d54bc0 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d54bd0 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d54be0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d54bf0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d54c00 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d54c10 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d54c20 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d54c30 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d54c40 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d54c50 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d54c60 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d54c70 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d54c80 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d54c90 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d54ca0 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d54cb0 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d54cc0 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d54cd0 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d54ce0 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00d54cf0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d54d00 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d54d10 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d54d20 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d54d30 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d54d40 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d54d50 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d54d60 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d54d70 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ + 0x00d54d80 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ + 0x00d54d90 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ + 0x00d54da0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d54db0 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ + 0x00d54dc0 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ + 0x00d54dd0 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ + 0x00d54de0 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ + 0x00d54df0 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ + 0x00d54e00 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ + 0x00d54e10 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d54e20 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ + 0x00d54e30 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ + 0x00d54e40 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00d54e50 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00d54e60 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ + 0x00d54e70 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ + 0x00d54e80 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d54e90 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d54ea0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d54eb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d54ec0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d54ed0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d54ee0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d54ef0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d54f00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d54f10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d54f20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d54f30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d54f40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d54f50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d54f60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d54f70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d54f80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d54f90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d54fa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d54fb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d54fc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d54fd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d54fe0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d54ff0 63342076 5f6f6666 73657473 3b200a20 c4 v_offsets; . │ │ │ │ + 0x00d55000 20696e20 76656334 20765f63 6f6c6f72 in vec4 v_color │ │ │ │ + 0x00d55010 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d55020 46726167 436f6c6f 723b200a 2020636f FragColor; . co │ │ │ │ + 0x00d55030 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d55040 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d55050 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d55060 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d55070 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d55080 20765f63 6f6c6f72 3b200a20 20202076 v_color; . v │ │ │ │ + 0x00d55090 65633220 72616469 75733b20 0a202020 ec2 radius; . │ │ │ │ + 0x00d550a0 20726164 6975732e 78203d20 6d617828 radius.x = max( │ │ │ │ + 0x00d550b0 302e302c 20616273 28765f6f 66667365 0.0, abs(v_offse │ │ │ │ + 0x00d550c0 74732e78 29202d20 765f6f66 66736574 ts.x) - v_offset │ │ │ │ + 0x00d550d0 732e7a29 3b200a20 20202072 61646975 s.z); . radiu │ │ │ │ + 0x00d550e0 732e7920 3d206d61 7828302e 302c2061 s.y = max(0.0, a │ │ │ │ + 0x00d550f0 62732876 5f6f6666 73657473 2e792920 bs(v_offsets.y) │ │ │ │ + 0x00d55100 2d20765f 6f666673 6574732e 77293b20 - v_offsets.w); │ │ │ │ + 0x00d55110 0a202020 20666c6f 6174206d 61785261 . float maxRa │ │ │ │ + 0x00d55120 64697573 203d2031 2e303b20 0a202020 dius = 1.0; . │ │ │ │ + 0x00d55130 20666c6f 61742061 61526164 69757320 float aaRadius │ │ │ │ + 0x00d55140 3d20302e 393b200a 20202020 666c6f61 = 0.9; . floa │ │ │ │ + 0x00d55150 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ + 0x00d55160 6f6f7468 73746570 28616152 61646975 oothstep(aaRadiu │ │ │ │ + 0x00d55170 73202a20 61615261 64697573 2c206d61 s * aaRadius, ma │ │ │ │ + 0x00d55180 78526164 69757320 2a206d61 78526164 xRadius * maxRad │ │ │ │ + 0x00d55190 6975732c 20646f74 28726164 6975732e ius, dot(radius. │ │ │ │ + 0x00d551a0 78792c20 72616469 75732e78 7929293b xy, radius.xy)); │ │ │ │ + 0x00d551b0 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00d551c0 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ + 0x00d551d0 61202a20 28312e30 202d2073 74657056 a * (1.0 - stepV │ │ │ │ + 0x00d551e0 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ + 0x00d551f0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d55200 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d55210 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d55220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d55230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d55240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d55250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d55260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d55270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d55280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d55290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d552a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d552b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d552c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d552d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d552e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d552f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d55300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d55310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d55320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d55330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d55340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d55350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d55360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d55370 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d55380 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d55390 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d553a0 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d553b0 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d553c0 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d553d0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d553e0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d553f0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d55400 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d55410 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d55420 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d55430 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d55440 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d55450 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d55460 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d55470 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d55480 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d55490 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d554a0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d554b0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d554c0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d554d0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d554e0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d554f0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d55500 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d55510 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d55520 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d55530 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d55540 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d55550 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d55560 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00d55570 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00d55580 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d55590 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ + 0x00d555a0 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ + 0x00d555b0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d555c0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d555d0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d555e0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d555f0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d55600 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d55610 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d55620 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d55630 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d55640 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d55650 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d55660 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d55670 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d55680 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d55690 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d556a0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d556b0 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d556c0 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00d556d0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d556e0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d556f0 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d55700 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d55710 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d55720 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d55730 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d55740 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d55750 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d55760 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d55770 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d55780 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d55790 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d557a0 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d557b0 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d557c0 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d557d0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d557e0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d557f0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d55800 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d55810 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d55820 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d55830 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d55840 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d55850 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d55860 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d55870 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d55880 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d55890 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d558a0 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d558b0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d558c0 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d558d0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d558e0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d558f0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d55900 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d55910 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d55920 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d55930 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d55940 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d55950 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d55960 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d55970 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d55980 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d55990 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d559a0 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d559b0 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d559c0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d559d0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d559e0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d559f0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d55a00 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d55a10 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d55a20 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d55a30 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d55a40 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d55a50 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d55a60 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d55a70 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d55a80 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d55a90 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d55aa0 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d55ab0 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d55ac0 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00d55ad0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d55ae0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d55af0 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d55b00 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d55b10 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d55b20 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d55b30 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d55b40 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ + 0x00d55b50 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ + 0x00d55b60 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ + 0x00d55b70 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ + 0x00d55b80 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ + 0x00d55b90 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ + 0x00d55ba0 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ + 0x00d55bb0 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ + 0x00d55bc0 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ + 0x00d55bd0 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ + 0x00d55be0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d55bf0 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ + 0x00d55c00 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00d55c10 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00d55c20 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00d55c30 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00d55c40 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d55c50 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d55c60 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d55c70 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00d55c80 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00d55c90 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d55ca0 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00d55cb0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d55cc0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d55cd0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00d55ce0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00d55cf0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00d55d00 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ + 0x00d55d10 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ + 0x00d55d20 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ + 0x00d55d30 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ + 0x00d55d40 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ + 0x00d55d50 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00d55d60 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ + 0x00d55d70 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d55d80 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ + 0x00d55d90 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00d55da0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d55db0 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ + 0x00d55dc0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d55dd0 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ + 0x00d55de0 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ + 0x00d55df0 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ + 0x00d55e00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d55e10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d55e20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d55e30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d55e40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d55e50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d55e60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d55e70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d55e80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d55e90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d55ea0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d55eb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d55ec0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d55ed0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d55ee0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d55ef0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d55f00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d55f10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d55f20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d55f30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d55f40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d55f50 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d55f60 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d55f70 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d55f80 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00d55f90 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00d55fa0 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00d55fb0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d55fc0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00d55fd0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00d55fe0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00d55ff0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00d56000 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00d56010 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d56020 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00d56030 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d56040 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d56050 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d56060 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d56070 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d56080 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d56090 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d560a0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d560b0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d560c0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d560d0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d560e0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d560f0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d56100 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d56110 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d56120 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d56130 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ + 0x00d56140 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ + 0x00d56150 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ + 0x00d56160 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d56170 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d56180 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00d56190 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00d561a0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d561b0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d561c0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d561d0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00d561e0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d561f0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d56200 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00d56210 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d56220 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00d56230 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00d56240 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00d56250 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00d56260 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00d56270 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00d56280 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d56290 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00d562a0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d562b0 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00d562c0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00d562d0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00d562e0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00d562f0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00d56300 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00d56310 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d56320 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00d56330 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00d56340 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d56350 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00d56360 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00d56370 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00d56380 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00d56390 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d563a0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d563b0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d563c0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00d563d0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00d563e0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00d563f0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00d56400 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d56410 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d56420 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d56430 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00d56440 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00d56450 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00d56460 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00d56470 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00d56480 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00d56490 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d564a0 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00d564b0 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00d564c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d564d0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00d564e0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00d564f0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00d56500 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00d56510 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d56520 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00d56530 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00d56540 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00d56550 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00d56560 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00d56570 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d56580 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00d56590 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00d565a0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d565b0 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00d565c0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d565d0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00d565e0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00d565f0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00d56600 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00d56610 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00d56620 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00d56630 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00d56640 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00d56650 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00d56660 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00d56670 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00d56680 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00d56690 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00d566a0 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00d566b0 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00d566c0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00d566d0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d566e0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00d566f0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00d56700 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d56710 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00d56720 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ + 0x00d56730 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ + 0x00d56740 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ + 0x00d56750 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ + 0x00d56760 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ + 0x00d56770 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d56780 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d56790 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ + 0x00d567a0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00d567b0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d567c0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d567d0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00d567e0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00d567f0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00d56800 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00d56810 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00d56820 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d56830 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00d56840 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d56850 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ + 0x00d56860 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ + 0x00d56870 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d56880 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d56890 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d568a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d568b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d568c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d568d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d568e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d568f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d56900 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d56910 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d56920 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d56930 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d56940 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d56950 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d56960 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d56970 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d56980 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d56990 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d569a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d569b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d569c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d569d0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d569e0 7264733b 200a2020 696e2066 6c6f6174 rds; . in float │ │ │ │ + 0x00d569f0 20765f69 6e74656e 73697479 3b200a20 v_intensity; . │ │ │ │ + 0x00d56a00 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00d56a10 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d56a20 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d56a30 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d56a40 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d56a50 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d56a60 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d56a70 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d56a80 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d56a90 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d56aa0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d56ab0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d56ac0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d56ad0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d56ae0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d56af0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d56b00 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d56b10 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d56b20 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d56b30 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d56b40 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d56b50 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d56b60 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d56b70 0a202020 20766563 34206669 6e616c43 . vec4 finalC │ │ │ │ + 0x00d56b80 6f6c6f72 203d2076 65633428 74657874 olor = vec4(text │ │ │ │ + 0x00d56b90 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d56ba0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d56bb0 292e7267 622c2075 5f6f7061 63697479 ).rgb, u_opacity │ │ │ │ + 0x00d56bc0 293b200a 20202020 765f4672 6167436f ); . v_FragCo │ │ │ │ + 0x00d56bd0 6c6f7220 3d207665 63342828 765f696e lor = vec4((v_in │ │ │ │ + 0x00d56be0 74656e73 69747920 2a20302e 32202b20 tensity * 0.2 + │ │ │ │ + 0x00d56bf0 302e3829 202a2066 696e616c 436f6c6f 0.8) * finalColo │ │ │ │ + 0x00d56c00 722e7267 622c2066 696e616c 436f6c6f r.rgb, finalColo │ │ │ │ + 0x00d56c10 722e6129 3b200a20 207d200a 00000000 r.a); . } ..... │ │ │ │ + 0x00d56c20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d56c30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d56c40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d56c50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d56c60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d56c70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d56c80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d56c90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d56ca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d56cb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d56cc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d56cd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d56ce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d56cf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d56d00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d56d10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d56d20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d56d30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d56d40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d56d50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d56d60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d56d70 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d56d80 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d56d90 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d56da0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d56db0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d56dc0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d56dd0 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00d56de0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d56df0 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d56e00 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d56e10 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d56e20 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00d56e30 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d56e40 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00d56e50 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00d56e60 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d56e70 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d56e80 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00d56e90 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d56ea0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d56eb0 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00d56ec0 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00d56ed0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d56ee0 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00d56ef0 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00d56f00 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00d56f10 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00d56f20 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00d56f30 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d56f40 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00d56f50 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00d56f60 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d56f70 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00d56f80 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00d56f90 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d56fa0 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00d56fb0 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00d56fc0 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00d56fd0 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00d56fe0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d56ff0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d57000 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d57010 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00d57020 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00d57030 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00d57040 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00d57050 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d57060 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00d57070 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d57080 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00d57090 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00d570a0 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00d570b0 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00d570c0 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00d570d0 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00d570e0 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00d570f0 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00d57100 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00d57110 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d57120 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00d57130 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00d57140 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00d57150 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00d57160 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d57170 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00d57180 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00d57190 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00d571a0 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00d571b0 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00d571c0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d571d0 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00d571e0 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00d571f0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d57200 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00d57210 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00d57220 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00d57230 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00d57240 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00d57250 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d57260 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00d57270 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d57280 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00d57290 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00d572a0 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00d572b0 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00d572c0 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00d572d0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d572e0 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00d572f0 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00d57300 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00d57310 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00d57320 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d57330 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00d57340 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d57350 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d57360 203d2061 5f74636f 6f72643b 200a2020 = a_tcoord; . │ │ │ │ + 0x00d57370 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d57380 76656334 28615f70 6f732c20 302e302c vec4(a_pos, 0.0, │ │ │ │ + 0x00d57390 20312e30 293b200a 20207d20 0a000000 1.0); . } .... │ │ │ │ + 0x00d573a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d573b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d573c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d573d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d573e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d573f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d57400 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d57410 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d57420 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d57430 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d57440 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d57450 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d57460 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d57470 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d57480 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d57490 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d574a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d574b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d574c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d574d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d574e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d574f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d57500 7264733b 200a2020 696e2076 65633220 rds; . in vec2 │ │ │ │ + 0x00d57510 765f6d61 736b5465 78436f6f 7264733b v_maskTexCoords; │ │ │ │ + 0x00d57520 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d57530 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d57540 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d57550 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d57560 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d57570 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d57580 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d57590 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d575a0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d575b0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d575c0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d575d0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d575e0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d575f0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d57600 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d57610 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d57620 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d57630 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00d57640 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00d57650 65783b20 0a202075 6e69666f 726d2073 ex; . uniform s │ │ │ │ + 0x00d57660 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00d57670 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d57680 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d57690 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d576a0 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d576b0 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ + 0x00d576c0 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ + 0x00d576d0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d576e0 636f6c6f 72546578 436f6f72 64732920 colorTexCoords) │ │ │ │ + 0x00d576f0 2a207465 78747572 6528755f 6d61736b * texture(u_mask │ │ │ │ + 0x00d57700 5465782c 20765f6d 61736b54 6578436f Tex, v_maskTexCo │ │ │ │ + 0x00d57710 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ + 0x00d57720 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ + 0x00d57730 61636974 793b200a 20202020 765f4672 acity; . v_Fr │ │ │ │ + 0x00d57740 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d57750 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d57760 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d57770 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d57780 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d57790 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d577a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d577b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d577c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d577d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d577e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d577f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d57800 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d57810 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d57820 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d57830 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d57840 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d57850 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d57860 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d57870 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d57880 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d57890 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d578a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d578b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d578c0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d578d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d578e0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d578f0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d57900 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ + 0x00d57910 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ + 0x00d57920 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ + 0x00d57930 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ + 0x00d57940 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00d57950 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d57960 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d57970 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d57980 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00d57990 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00d579a0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00d579b0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00d579c0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00d579d0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d579e0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d579f0 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00d57a00 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00d57a10 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00d57a20 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00d57a30 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d57a40 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ + 0x00d57a50 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00d57a60 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d57a70 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00d57a80 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ + 0x00d57a90 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d57aa0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d57ab0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d57ac0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d57ad0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d57ae0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d57af0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d57b00 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d57b10 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d57b20 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d57b30 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d57b40 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d57b50 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d57b60 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d57b70 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d57b80 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d57b90 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d57ba0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d57bb0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d57bc0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d57bd0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d57be0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d57bf0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d57c00 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d57c10 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d57c20 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d57c30 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d57c40 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d57c50 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d57c60 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d57c70 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d57c80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d57c90 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d57ca0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d57cb0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d57cc0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d57cd0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d57ce0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d57cf0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d57d00 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d57d10 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d57d20 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d57d30 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d57d40 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d57d50 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d57d60 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d57d70 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d57d80 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d57d90 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d57da0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d57db0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d57dc0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d57dd0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d57de0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d57df0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d57e00 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d57e10 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d57e20 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d57e30 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d57e40 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d57e50 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d57e60 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d57e70 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d57e80 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d57e90 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d57ea0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d57eb0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d57ec0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d57ed0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d57ee0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d57ef0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d57f00 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d57f10 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d57f20 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d57f30 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d57f40 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d57f50 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d57f60 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d57f70 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d57f80 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d57f90 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d57fa0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d57fb0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d57fc0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d57fd0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d57fe0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d57ff0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d58000 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d58010 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d58020 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d58030 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ + 0x00d58040 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ + 0x00d58050 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ + 0x00d58060 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ + 0x00d58070 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ + 0x00d58080 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ + 0x00d58090 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00d580a0 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00d580b0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d580c0 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ + 0x00d580d0 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ + 0x00d580e0 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ + 0x00d580f0 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ + 0x00d58100 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d58110 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ + 0x00d58120 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ + 0x00d58130 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ + 0x00d58140 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ + 0x00d58150 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d58160 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d58170 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ + 0x00d58180 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ + 0x00d58190 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ + 0x00d581a0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d581b0 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ + 0x00d581c0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d581d0 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ + 0x00d581e0 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00d581f0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d58200 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00d58210 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00d58220 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d58230 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d58240 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ + 0x00d58250 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ + 0x00d58260 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00d58270 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d58280 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d58290 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ + 0x00d582a0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00d582b0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d582c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d582d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d582e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d582f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d58300 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d58310 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d58320 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d58330 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d58340 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d58350 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d58360 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d58370 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d58380 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d58390 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d583a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d583b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d583c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d583d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d583e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d583f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d58400 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d58410 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d58420 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00d58430 765f6f66 66736574 3b200a20 206f7574 v_offset; . out │ │ │ │ + 0x00d58440 20766563 3420765f 46726167 436f6c6f vec4 v_FragColo │ │ │ │ + 0x00d58450 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d58460 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00d58470 4d657472 6963733b 200a2020 756e6966 Metrics; . unif │ │ │ │ + 0x00d58480 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d58490 636f6c6f 72546578 3b200a20 20756e69 colorTex; . uni │ │ │ │ + 0x00d584a0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d584b0 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ + 0x00d584c0 65783b20 0a202023 64656669 6e652053 ex; . #define S │ │ │ │ + 0x00d584d0 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00d584e0 726f2874 65782c20 636f6f72 64292074 ro(tex, coord) t │ │ │ │ + 0x00d584f0 65787475 72654c6f 64287465 782c2063 extureLod(tex, c │ │ │ │ + 0x00d58500 6f6f7264 2c20302e 3029200a 2020636f oord, 0.0) . co │ │ │ │ + 0x00d58510 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d58520 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d58530 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d58540 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d58550 65633420 613b200a 20202020 612e7820 ec4 a; . a.x │ │ │ │ + 0x00d58560 3d207465 78747572 6528755f 626c656e = texture(u_blen │ │ │ │ + 0x00d58570 64696e67 57656967 68745465 782c2076 dingWeightTex, v │ │ │ │ + 0x00d58580 5f6f6666 7365742e 7879292e 613b202f _offset.xy).a; / │ │ │ │ + 0x00d58590 2f205269 67687420 0a202020 20612e79 / Right . a.y │ │ │ │ + 0x00d585a0 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ + 0x00d585b0 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ + 0x00d585c0 765f6f66 66736574 2e7a7729 2e673b20 v_offset.zw).g; │ │ │ │ + 0x00d585d0 2f2f2054 6f70200a 20202020 612e777a // Top . a.wz │ │ │ │ + 0x00d585e0 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ + 0x00d585f0 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ + 0x00d58600 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d58610 292e787a 3b202f2f 20426f74 746f6d20 ).xz; // Bottom │ │ │ │ + 0x00d58620 2f204c65 6674200a 20202020 69662028 / Left . if ( │ │ │ │ + 0x00d58630 646f7428 612c2076 65633428 312e302c dot(a, vec4(1.0, │ │ │ │ + 0x00d58640 20312e30 2c20312e 302c2031 2e302929 1.0, 1.0, 1.0)) │ │ │ │ + 0x00d58650 203c2031 652d3529 200a2020 20207b20 < 1e-5) . { │ │ │ │ + 0x00d58660 0a202020 20202076 5f467261 67436f6c . v_FragCol │ │ │ │ + 0x00d58670 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d58680 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ + 0x00d58690 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ + 0x00d586a0 207d200a 20202020 656c7365 200a2020 } . else . │ │ │ │ + 0x00d586b0 20207b20 0a202020 20202076 65633420 { . vec4 │ │ │ │ + 0x00d586c0 626c656e 64696e67 4f666673 6574203d blendingOffset = │ │ │ │ + 0x00d586d0 20766563 3428302e 302c2061 2e792c20 vec4(0.0, a.y, │ │ │ │ + 0x00d586e0 302e302c 20612e77 293b200a 20202020 0.0, a.w); . │ │ │ │ + 0x00d586f0 20207665 63322062 6c656e64 696e6757 vec2 blendingW │ │ │ │ + 0x00d58700 65696768 74203d20 612e7977 3b200a20 eight = a.yw; . │ │ │ │ + 0x00d58710 20202020 20696620 286d6178 28612e78 if (max(a.x │ │ │ │ + 0x00d58720 2c20612e 7a29203e 206d6178 28612e79 , a.z) > max(a.y │ │ │ │ + 0x00d58730 2c20612e 77292920 0a202020 2020207b , a.w)) . { │ │ │ │ + 0x00d58740 200a2020 20202020 2020626c 656e6469 . blendi │ │ │ │ + 0x00d58750 6e674f66 66736574 203d2076 65633428 ngOffset = vec4( │ │ │ │ + 0x00d58760 612e782c 20302e30 2c20612e 7a2c2030 a.x, 0.0, a.z, 0 │ │ │ │ + 0x00d58770 2e30293b 200a2020 20202020 2020626c .0); . bl │ │ │ │ + 0x00d58780 656e6469 6e675765 69676874 203d2061 endingWeight = a │ │ │ │ + 0x00d58790 2e787a3b 200a2020 20202020 7d200a20 .xz; . } . │ │ │ │ + 0x00d587a0 20202020 20626c65 6e64696e 67576569 blendingWei │ │ │ │ + 0x00d587b0 67687420 2f3d2064 6f742862 6c656e64 ght /= dot(blend │ │ │ │ + 0x00d587c0 696e6757 65696768 742c2076 65633228 ingWeight, vec2( │ │ │ │ + 0x00d587d0 312e302c 20312e30 29293b20 0a202020 1.0, 1.0)); . │ │ │ │ + 0x00d587e0 20202076 65633420 6263203d 20626c65 vec4 bc = ble │ │ │ │ + 0x00d587f0 6e64696e 674f6666 73657420 2a207665 ndingOffset * ve │ │ │ │ + 0x00d58800 63342875 5f667261 6d656275 66666572 c4(u_framebuffer │ │ │ │ + 0x00d58810 4d657472 6963732e 78792c20 2d755f66 Metrics.xy, -u_f │ │ │ │ + 0x00d58820 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00d58830 732e7879 293b200a 20202020 20206263 s.xy); . bc │ │ │ │ + 0x00d58840 202b3d20 765f636f 6c6f7254 6578436f += v_colorTexCo │ │ │ │ + 0x00d58850 6f726473 2e787978 793b200a 20202020 ords.xyxy; . │ │ │ │ + 0x00d58860 20207665 63342063 6f6c6f72 203d2062 vec4 color = b │ │ │ │ + 0x00d58870 6c656e64 696e6757 65696768 742e7820 lendingWeight.x │ │ │ │ + 0x00d58880 2a20534d 41415361 6d706c65 4c657665 * SMAASampleLeve │ │ │ │ + 0x00d58890 6c5a6572 6f28755f 636f6c6f 72546578 lZero(u_colorTex │ │ │ │ + 0x00d588a0 2c206263 2e787929 3b200a20 20202020 , bc.xy); . │ │ │ │ + 0x00d588b0 20636f6c 6f72202b 3d20626c 656e6469 color += blendi │ │ │ │ + 0x00d588c0 6e675765 69676874 2e79202a 20534d41 ngWeight.y * SMA │ │ │ │ + 0x00d588d0 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00d588e0 28755f63 6f6c6f72 5465782c 2062632e (u_colorTex, bc. │ │ │ │ + 0x00d588f0 7a77293b 200a2020 20202020 765f4672 zw); . v_Fr │ │ │ │ + 0x00d58900 6167436f 6c6f7220 3d20636f 6c6f723b agColor = color; │ │ │ │ + 0x00d58910 200a2020 20207d20 0a20207d 200a0000 . } . } ... │ │ │ │ + 0x00d58920 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d58930 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d58940 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d58950 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d58960 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d58970 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d58980 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d58990 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d589a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d589b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d589c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d589d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d589e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d589f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d58a00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d58a10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d58a20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d58a30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d58a40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d58a50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d58a60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d58a70 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d58a80 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d58a90 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d58aa0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d58ab0 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00d58ac0 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ + 0x00d58ad0 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00d58ae0 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ + 0x00d58af0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d58b00 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d58b10 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d58b20 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d58b30 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d58b40 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d58b50 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d58b60 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d58b70 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d58b80 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d58b90 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d58ba0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d58bb0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d58bc0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d58bd0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d58be0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d58bf0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d58c00 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d58c10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d58c20 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d58c30 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d58c40 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d58c50 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d58c60 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d58c70 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d58c80 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d58c90 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d58ca0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d58cb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d58cc0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d58cd0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d58ce0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d58cf0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d58d00 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d58d10 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d58d20 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d58d30 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d58d40 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d58d50 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d58d60 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d58d70 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d58d80 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d58d90 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d58da0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d58db0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d58dc0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d58dd0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d58de0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d58df0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d58e00 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d58e10 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d58e20 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d58e30 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d58e40 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d58e50 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d58e60 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d58e70 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d58e80 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d58e90 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d58ea0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d58eb0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d58ec0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d58ed0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d58ee0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d58ef0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d58f00 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d58f10 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d58f20 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d58f30 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d58f40 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d58f50 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d58f60 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d58f70 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d58f80 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d58f90 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d58fa0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d58fb0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d58fc0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d58fd0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d58fe0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d58ff0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d59000 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d59010 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d59020 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d59030 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d59040 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d59050 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d59060 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d59070 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d59080 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ + 0x00d59090 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d590a0 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ + 0x00d590b0 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ + 0x00d590c0 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00d590d0 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ + 0x00d590e0 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ + 0x00d590f0 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ + 0x00d59100 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d59110 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ + 0x00d59120 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ + 0x00d59130 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d59140 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d59150 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d59160 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d59170 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d59180 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d59190 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d591a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d591b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d591c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d591d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d591e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d591f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d59200 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d59210 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d59220 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d59230 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d59240 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d59250 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d59260 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d59270 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d59280 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d59290 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d592a0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d592b0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d592c0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d592d0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d592e0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d592f0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d59300 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00d59310 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d59320 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d59330 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d59340 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d59350 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00d59360 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00d59370 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00d59380 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d59390 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00d593a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d593b0 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00d593c0 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d593d0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d593e0 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00d593f0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00d59400 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00d59410 6c696e65 50617373 3b200a20 20636f6e linePass; . con │ │ │ │ + 0x00d59420 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d59430 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d59440 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d59450 6e282920 0a20207b 200a2020 23696664 n() . { . #ifd │ │ │ │ + 0x00d59460 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00d59470 2020204c 4f575f50 20766563 34206669 LOW_P vec4 fi │ │ │ │ + 0x00d59480 6e616c43 6f6c6f72 203d2076 5f636f6c nalColor = v_col │ │ │ │ + 0x00d59490 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ + 0x00d594a0 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ + 0x00d594b0 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ + 0x00d594c0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d594d0 636f6c6f 72546578 436f6f72 6473293b colorTexCoords); │ │ │ │ + 0x00d594e0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d594f0 66696e61 6c436f6c 6f722e61 202a3d20 finalColor.a *= │ │ │ │ + 0x00d59500 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d59510 765f4672 6167436f 6c6f7220 3d206669 v_FragColor = fi │ │ │ │ + 0x00d59520 6e616c43 6f6c6f72 3b200a20 207d200a nalColor; . } . │ │ │ │ + 0x00d59530 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d59540 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d59550 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d59560 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d59570 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d59580 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d59590 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d595a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d595b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d595c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d595d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d595e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d595f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d59600 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d59610 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d59620 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d59630 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d59640 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d59650 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d59660 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d59670 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d59680 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d59690 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d596a0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d596b0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d596c0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d596d0 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d596e0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d596f0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d59700 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d59710 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d59720 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d59730 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d59740 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d59750 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d59760 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ + 0x00d59770 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ + 0x00d59780 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ + 0x00d59790 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ + 0x00d597a0 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ + 0x00d597b0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d597c0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d597d0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d597e0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d597f0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d59800 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d59810 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d59820 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d59830 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d59840 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d59850 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d59860 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d59870 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d59880 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d59890 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d598a0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d598b0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d598c0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d598d0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d598e0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d598f0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d59900 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d59910 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d59920 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d59930 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d59940 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d59950 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d59960 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d59970 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d59980 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d59990 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d599a0 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d599b0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d599c0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d599d0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d599e0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d599f0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d59a00 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d59a10 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d59a20 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d59a30 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d59a40 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d59a50 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d59a60 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d59a70 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d59a80 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d59a90 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d59aa0 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d59ab0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d59ac0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d59ad0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d59ae0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d59af0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d59b00 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d59b10 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d59b20 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d59b30 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d59b40 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d59b50 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d59b60 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d59b70 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d59b80 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d59b90 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d59ba0 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d59bb0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d59bc0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d59bd0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d59be0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d59bf0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d59c00 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d59c10 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d59c20 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d59c30 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d59c40 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d59c50 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d59c60 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d59c70 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d59c80 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d59c90 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d59ca0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d59cb0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d59cc0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d59cd0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d59ce0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d59cf0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d59d00 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d59d10 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d59d20 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d59d30 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d59d40 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d59d50 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ + 0x00d59d60 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ + 0x00d59d70 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d59d80 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d59d90 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d59da0 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d59db0 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d59dc0 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ + 0x00d59dd0 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ + 0x00d59de0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00d59df0 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ + 0x00d59e00 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ + 0x00d59e10 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ + 0x00d59e20 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ + 0x00d59e30 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d59e40 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ + 0x00d59e50 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00d59e60 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ + 0x00d59e70 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ + 0x00d59e80 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d59e90 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d59ea0 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ + 0x00d59eb0 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ + 0x00d59ec0 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ + 0x00d59ed0 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ + 0x00d59ee0 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ + 0x00d59ef0 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ + 0x00d59f00 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ + 0x00d59f10 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ + 0x00d59f20 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d59f30 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ + 0x00d59f40 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ + 0x00d59f50 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ + 0x00d59f60 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d59f70 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ + 0x00d59f80 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00d59f90 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00d59fa0 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d59fb0 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ + 0x00d59fc0 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ + 0x00d59fd0 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ + 0x00d59fe0 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ + 0x00d59ff0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d5a000 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5a010 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5a020 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5a030 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5a040 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5a050 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5a060 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5a070 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5a080 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5a090 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5a0a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5a0b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5a0c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5a0d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5a0e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5a0f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5a100 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5a110 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5a120 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5a130 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5a140 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d5a150 726d204d 45444955 4d5f5020 73616d70 rm MEDIUM_P samp │ │ │ │ + 0x00d5a160 6c657232 44417272 61792075 5f636f6c ler2DArray u_col │ │ │ │ + 0x00d5a170 6f725465 783b200a 2020696e 20766563 orTex; . in vec │ │ │ │ + 0x00d5a180 3320765f 74657843 6f6f7264 733b200a 3 v_texCoords; . │ │ │ │ + 0x00d5a190 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d5a1a0 67436f6c 6f723b20 0a202063 6f6e7374 gColor; . const │ │ │ │ + 0x00d5a1b0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d5a1c0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d5a1d0 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ + 0x00d5a1e0 29200a20 207b200a 20202020 765f4672 ) . { . v_Fr │ │ │ │ + 0x00d5a1f0 6167436f 6c6f7220 3d207465 78747572 agColor = textur │ │ │ │ + 0x00d5a200 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d5a210 74657843 6f6f7264 73293b20 0a20207d texCoords); . } │ │ │ │ + 0x00d5a220 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d5a230 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5a240 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5a250 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5a260 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5a270 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5a280 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5a290 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5a2a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5a2b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5a2c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5a2d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5a2e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5a2f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5a300 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5a310 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5a320 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5a330 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5a340 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5a350 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5a360 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5a370 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5a380 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d5a390 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d5a3a0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d5a3b0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d5a3c0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d5a3d0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d5a3e0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d5a3f0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d5a400 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5a410 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00d5a420 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00d5a430 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d5a440 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d5a450 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d5a460 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d5a470 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d5a480 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d5a490 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d5a4a0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d5a4b0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d5a4c0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d5a4d0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d5a4e0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d5a4f0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5a500 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d5a510 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d5a520 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d5a530 50617373 3b200a20 20756e69 666f726d Pass; . uniform │ │ │ │ + 0x00d5a540 2073616d 706c6572 32442075 5f6d6173 sampler2D u_mas │ │ │ │ + 0x00d5a550 6b546578 3b200a20 20636f6e 73742066 kTex; . const f │ │ │ │ + 0x00d5a560 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d5a570 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d5a580 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d5a590 0a20207b 200a2020 23696664 65662045 . { . #ifdef E │ │ │ │ + 0x00d5a5a0 4e41424c 455f5654 46200a20 2020204c NABLE_VTF . L │ │ │ │ + 0x00d5a5b0 4f575f50 20766563 3420636f 6c6f7220 OW_P vec4 color │ │ │ │ + 0x00d5a5c0 3d20765f 636f6c6f 723b200a 20202365 = v_color; . #e │ │ │ │ + 0x00d5a5d0 6c736520 0a202020 204c4f57 5f502076 lse . LOW_P v │ │ │ │ + 0x00d5a5e0 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ + 0x00d5a5f0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d5a600 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d5a610 293b200a 20202365 6e646966 200a2020 ); . #endif . │ │ │ │ + 0x00d5a620 2020636f 6c6f7220 2a3d2074 65787475 color *= textu │ │ │ │ + 0x00d5a630 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ + 0x00d5a640 6d61736b 54657843 6f6f7264 73293b20 maskTexCoords); │ │ │ │ + 0x00d5a650 0a202020 20636f6c 6f722e61 202a3d20 . color.a *= │ │ │ │ + 0x00d5a660 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d5a670 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ + 0x00d5a680 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00d5a690 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5a6a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5a6b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5a6c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5a6d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5a6e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5a6f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5a700 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5a710 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5a720 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5a730 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5a740 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5a750 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5a760 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5a770 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5a780 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5a790 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5a7a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5a7b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5a7c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5a7d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5a7e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5a7f0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5a800 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d5a810 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d5a820 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d5a830 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00d5a840 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00d5a850 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00d5a860 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00d5a870 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d5a880 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d5a890 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d5a8a0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d5a8b0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d5a8c0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d5a8d0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d5a8e0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d5a8f0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d5a900 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d5a910 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d5a920 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d5a930 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d5a940 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5a950 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d5a960 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d5a970 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d5a980 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d5a990 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d5a9a0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d5a9b0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d5a9c0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d5a9d0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d5a9e0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d5a9f0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d5aa00 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d5aa10 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d5aa20 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d5aa30 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d5aa40 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d5aa50 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d5aa60 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d5aa70 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d5aa80 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d5aa90 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d5aaa0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d5aab0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d5aac0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d5aad0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d5aae0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d5aaf0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d5ab00 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d5ab10 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d5ab20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5ab30 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d5ab40 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d5ab50 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d5ab60 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d5ab70 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d5ab80 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d5ab90 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d5aba0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d5abb0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d5abc0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d5abd0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d5abe0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d5abf0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d5ac00 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d5ac10 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d5ac20 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d5ac30 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d5ac40 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d5ac50 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d5ac60 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d5ac70 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d5ac80 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d5ac90 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d5aca0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d5acb0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d5acc0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d5acd0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d5ace0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d5acf0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d5ad00 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d5ad10 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d5ad20 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d5ad30 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d5ad40 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d5ad50 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d5ad60 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d5ad70 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d5ad80 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d5ad90 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d5ada0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d5adb0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d5adc0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d5add0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d5ade0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d5adf0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d5ae00 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d5ae10 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d5ae20 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d5ae30 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d5ae40 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d5ae50 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d5ae60 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d5ae70 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d5ae80 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d5ae90 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d5aea0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d5aeb0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d5aec0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d5aed0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d5aee0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d5aef0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d5af00 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d5af10 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d5af20 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d5af30 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d5af40 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d5af50 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d5af60 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d5af70 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d5af80 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d5af90 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d5afa0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d5afb0 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d5afc0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d5afd0 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ + 0x00d5afe0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d5aff0 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ + 0x00d5b000 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d5b010 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d5b020 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ + 0x00d5b030 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ + 0x00d5b040 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ + 0x00d5b050 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00d5b060 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ + 0x00d5b070 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ + 0x00d5b080 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d5b090 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ + 0x00d5b0a0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d5b0b0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d5b0c0 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ + 0x00d5b0d0 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ + 0x00d5b0e0 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ + 0x00d5b0f0 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ + 0x00d5b100 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ + 0x00d5b110 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ + 0x00d5b120 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d5b130 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5b140 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5b150 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5b160 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5b170 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5b180 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5b190 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5b1a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5b1b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5b1c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5b1d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5b1e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5b1f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5b200 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5b210 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5b220 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5b230 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5b240 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5b250 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5b260 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5b270 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5b280 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5b290 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5b2a0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d5b2b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d5b2c0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d5b2d0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d5b2e0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d5b2f0 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ + 0x00d5b300 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ + 0x00d5b310 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ + 0x00d5b320 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ + 0x00d5b330 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ + 0x00d5b340 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ + 0x00d5b350 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ + 0x00d5b360 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d5b370 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00d5b380 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00d5b390 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d5b3a0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d5b3b0 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ + 0x00d5b3c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d5b3d0 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ + 0x00d5b3e0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d5b3f0 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ + 0x00d5b400 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ + 0x00d5b410 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ + 0x00d5b420 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ + 0x00d5b430 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ + 0x00d5b440 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ + 0x00d5b450 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d5b460 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d5b470 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d5b480 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d5b490 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d5b4a0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d5b4b0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d5b4c0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d5b4d0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d5b4e0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d5b4f0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d5b500 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d5b510 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5b520 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d5b530 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d5b540 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5b550 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d5b560 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d5b570 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d5b580 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d5b590 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d5b5a0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d5b5b0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d5b5c0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d5b5d0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d5b5e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5b5f0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d5b600 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d5b610 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d5b620 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d5b630 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d5b640 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d5b650 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d5b660 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d5b670 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d5b680 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d5b690 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d5b6a0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d5b6b0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d5b6c0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d5b6d0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d5b6e0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d5b6f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5b700 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d5b710 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d5b720 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d5b730 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d5b740 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d5b750 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d5b760 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d5b770 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d5b780 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d5b790 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d5b7a0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d5b7b0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d5b7c0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d5b7d0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d5b7e0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d5b7f0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d5b800 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d5b810 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d5b820 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d5b830 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d5b840 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d5b850 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d5b860 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d5b870 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d5b880 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d5b890 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d5b8a0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d5b8b0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d5b8c0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d5b8d0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d5b8e0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d5b8f0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d5b900 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d5b910 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d5b920 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d5b930 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d5b940 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d5b950 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d5b960 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d5b970 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d5b980 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d5b990 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d5b9a0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d5b9b0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d5b9c0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d5b9d0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d5b9e0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d5b9f0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d5ba00 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00d5ba10 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ + 0x00d5ba20 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ + 0x00d5ba30 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ + 0x00d5ba40 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ + 0x00d5ba50 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00d5ba60 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ + 0x00d5ba70 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ + 0x00d5ba80 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ + 0x00d5ba90 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ + 0x00d5baa0 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ + 0x00d5bab0 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ + 0x00d5bac0 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ + 0x00d5bad0 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ + 0x00d5bae0 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ + 0x00d5baf0 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ + 0x00d5bb00 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ + 0x00d5bb10 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ + 0x00d5bb20 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d5bb30 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ + 0x00d5bb40 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ + 0x00d5bb50 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ + 0x00d5bb60 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ + 0x00d5bb70 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ + 0x00d5bb80 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ + 0x00d5bb90 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ + 0x00d5bba0 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ + 0x00d5bbb0 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ + 0x00d5bbc0 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ + 0x00d5bbd0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d5bbe0 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ + 0x00d5bbf0 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ + 0x00d5bc00 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ + 0x00d5bc10 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d5bc20 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ + 0x00d5bc30 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ + 0x00d5bc40 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ + 0x00d5bc50 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ + 0x00d5bc60 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ + 0x00d5bc70 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ + 0x00d5bc80 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ + 0x00d5bc90 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d5bca0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5bcb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5bcc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5bcd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5bce0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5bcf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5bd00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5bd10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5bd20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5bd30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5bd40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5bd50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5bd60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5bd70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5bd80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5bd90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5bda0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5bdb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5bdc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5bdd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5bde0 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ + 0x00d5bdf0 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ + 0x00d5be00 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ + 0x00d5be10 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ + 0x00d5be20 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ + 0x00d5be30 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ + 0x00d5be40 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ + 0x00d5be50 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ + 0x00d5be60 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ + 0x00d5be70 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ + 0x00d5be80 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ + 0x00d5be90 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ + 0x00d5bea0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d5beb0 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d5bec0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d5bed0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d5bee0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d5bef0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d5bf00 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d5bf10 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d5bf20 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d5bf30 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d5bf40 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d5bf50 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d5bf60 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d5bf70 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d5bf80 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d5bf90 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d5bfa0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d5bfb0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5bfc0 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d5bfd0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d5bfe0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d5bff0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d5c000 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d5c010 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d5c020 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d5c030 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d5c040 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d5c050 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d5c060 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d5c070 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d5c080 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d5c090 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d5c0a0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d5c0b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5c0c0 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d5c0d0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d5c0e0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d5c0f0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d5c100 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d5c110 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d5c120 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d5c130 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d5c140 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d5c150 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d5c160 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d5c170 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d5c180 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d5c190 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d5c1a0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d5c1b0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d5c1c0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d5c1d0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d5c1e0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d5c1f0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d5c200 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d5c210 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d5c220 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d5c230 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d5c240 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d5c250 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d5c260 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5c270 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d5c280 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d5c290 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d5c2a0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d5c2b0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d5c2c0 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d5c2d0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d5c2e0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d5c2f0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d5c300 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d5c310 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d5c320 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d5c330 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d5c340 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d5c350 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d5c360 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d5c370 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d5c380 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d5c390 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d5c3a0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d5c3b0 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d5c3c0 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d5c3d0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d5c3e0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d5c3f0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d5c400 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d5c410 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d5c420 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d5c430 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d5c440 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d5c450 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d5c460 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d5c470 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d5c480 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d5c490 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d5c4a0 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ + 0x00d5c4b0 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ + 0x00d5c4c0 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ + 0x00d5c4d0 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ + 0x00d5c4e0 293b200a 2020200a 20202020 76656334 ); . . vec4 │ │ │ │ + 0x00d5c4f0 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ + 0x00d5c500 78203d20 755f7469 6c65436f 6f726473 x = u_tileCoords │ │ │ │ + 0x00d5c510 4d696e4d 61785b67 6c5f496e 7374616e MinMax[gl_Instan │ │ │ │ + 0x00d5c520 63654944 5d3b200a 20202020 76656332 ceID]; . vec2 │ │ │ │ + 0x00d5c530 20776f72 6c64506f 73203d20 6d697828 worldPos = mix( │ │ │ │ + 0x00d5c540 74696c65 436f6f72 64734d69 6e4d6178 tileCoordsMinMax │ │ │ │ + 0x00d5c550 2e78792c 2074696c 65436f6f 7264734d .xy, tileCoordsM │ │ │ │ + 0x00d5c560 696e4d61 782e7a77 2c207175 61645665 inMax.zw, quadVe │ │ │ │ + 0x00d5c570 72746578 293b200a 20202020 76656334 rtex); . vec4 │ │ │ │ + 0x00d5c580 20706f73 203d2076 65633428 776f726c pos = vec4(worl │ │ │ │ + 0x00d5c590 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d5c5a0 2a20755f 6d6f6465 6c566965 77202a20 * u_modelView * │ │ │ │ + 0x00d5c5b0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d5c5c0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d5c5d0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d5c5e0 666f726d 28706f73 2c20755f 7069766f form(pos, u_pivo │ │ │ │ + 0x00d5c5f0 74547261 6e73666f 726d2c20 302e3029 tTransform, 0.0) │ │ │ │ + 0x00d5c600 3b200a20 20200a20 20202076 5f746578 ; . . v_tex │ │ │ │ + 0x00d5c610 436f6f72 6473203d 20766563 33287175 Coords = vec3(qu │ │ │ │ + 0x00d5c620 61645665 72746578 2c20666c 6f617428 adVertex, float( │ │ │ │ + 0x00d5c630 755f7465 78747572 65496e64 65785b67 u_textureIndex[g │ │ │ │ + 0x00d5c640 6c5f496e 7374616e 63654944 5d29293b l_InstanceID])); │ │ │ │ + 0x00d5c650 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d5c660 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5c670 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5c680 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5c690 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5c6a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5c6b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5c6c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5c6d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5c6e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5c6f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5c700 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5c710 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5c720 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5c730 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5c740 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5c750 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5c760 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5c770 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5c780 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5c790 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5c7a0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d5c7b0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d5c7c0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d5c7d0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d5c7e0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d5c7f0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d5c800 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d5c810 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d5c820 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00d5c830 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00d5c840 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d5c850 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00d5c860 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00d5c870 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00d5c880 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00d5c890 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d5c8a0 206d6174 3420755f 7069766f 74547261 mat4 u_pivotTra │ │ │ │ + 0x00d5c8b0 6e73666f 726d3b20 0a202075 6e69666f nsform; . unifo │ │ │ │ + 0x00d5c8c0 726d2076 65633220 755f636f 6e747261 rm vec2 u_contra │ │ │ │ + 0x00d5c8d0 73744761 6d6d613b 200a2020 756e6966 stGamma; . unif │ │ │ │ + 0x00d5c8e0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d5c8f0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00d5c900 666c6f61 7420755f 7a536361 6c653b20 float u_zScale; │ │ │ │ + 0x00d5c910 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d5c920 20755f69 6e746572 706f6c61 74696f6e u_interpolation │ │ │ │ + 0x00d5c930 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5c940 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d5c950 73733b20 0a202075 6e69666f 726d2073 ss; . uniform s │ │ │ │ + 0x00d5c960 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00d5c970 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d5c980 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d5c990 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d5c9a0 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d5c9b0 207b200a 20202369 66646566 20454e41 { . #ifdef ENA │ │ │ │ + 0x00d5c9c0 424c455f 56544620 0a202020 204c4f57 BLE_VTF . LOW │ │ │ │ + 0x00d5c9d0 5f502076 65633420 676c7970 68436f6c _P vec4 glyphCol │ │ │ │ + 0x00d5c9e0 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ + 0x00d5c9f0 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ + 0x00d5ca00 50207665 63342067 6c797068 436f6c6f P vec4 glyphColo │ │ │ │ + 0x00d5ca10 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d5ca20 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ + 0x00d5ca30 6578436f 6f726429 3b200a20 2023656e exCoord); . #en │ │ │ │ + 0x00d5ca40 64696620 0a202020 20666c6f 61742064 dif . float d │ │ │ │ + 0x00d5ca50 69737420 3d207465 78747572 6528755f ist = texture(u_ │ │ │ │ + 0x00d5ca60 6d61736b 5465782c 20765f6d 61736b54 maskTex, v_maskT │ │ │ │ + 0x00d5ca70 6578436f 6f726429 2e723b20 0a202020 exCoord).r; . │ │ │ │ + 0x00d5ca80 20666c6f 61742061 6c706861 203d2073 float alpha = s │ │ │ │ + 0x00d5ca90 6d6f6f74 68737465 7028755f 636f6e74 moothstep(u_cont │ │ │ │ + 0x00d5caa0 72617374 47616d6d 612e7820 2d20755f rastGamma.x - u_ │ │ │ │ + 0x00d5cab0 636f6e74 72617374 47616d6d 612e792c contrastGamma.y, │ │ │ │ + 0x00d5cac0 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00d5cad0 2e78202b 20755f63 6f6e7472 61737447 .x + u_contrastG │ │ │ │ + 0x00d5cae0 616d6d61 2e792c20 64697374 29202a20 amma.y, dist) * │ │ │ │ + 0x00d5caf0 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d5cb00 676c7970 68436f6c 6f722e61 202a3d20 glyphColor.a *= │ │ │ │ + 0x00d5cb10 616c7068 613b200a 20202020 765f4672 alpha; . v_Fr │ │ │ │ + 0x00d5cb20 6167436f 6c6f7220 3d20676c 79706843 agColor = glyphC │ │ │ │ + 0x00d5cb30 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d5cb40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5cb50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5cb60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5cb70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5cb80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5cb90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5cba0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5cbb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5cbc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5cbd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5cbe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5cbf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5cc00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5cc10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5cc20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5cc30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5cc40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5cc50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5cc60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5cc70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5cc80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5cc90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d5cca0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d5ccb0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d5ccc0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d5ccd0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d5cce0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d5ccf0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d5cd00 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d5cd10 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d5cd20 69666f72 6d207665 63322075 5f636f6e iform vec2 u_con │ │ │ │ + 0x00d5cd30 74726173 7447616d 6d613b20 0a202075 trastGamma; . u │ │ │ │ + 0x00d5cd40 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00d5cd50 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00d5cd60 726d2066 6c6f6174 20755f7a 5363616c rm float u_zScal │ │ │ │ + 0x00d5cd70 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00d5cd80 6f617420 755f696e 74657270 6f6c6174 oat u_interpolat │ │ │ │ + 0x00d5cd90 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d5cda0 666c6f61 7420755f 69734f75 746c696e float u_isOutlin │ │ │ │ + 0x00d5cdb0 65506173 733b200a 2020756e 69666f72 ePass; . unifor │ │ │ │ + 0x00d5cdc0 6d207361 6d706c65 72324420 755f636f m sampler2D u_co │ │ │ │ + 0x00d5cdd0 6c6f7254 65783b20 0a202063 6f6e7374 lorTex; . const │ │ │ │ + 0x00d5cde0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d5cdf0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d5ce00 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ + 0x00d5ce10 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d5ce20 2066696e 616c436f 6c6f7220 3d207465 finalColor = te │ │ │ │ + 0x00d5ce30 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d5ce40 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ + 0x00d5ce50 6473293b 200a2020 20206669 6e616c43 ds); . finalC │ │ │ │ + 0x00d5ce60 6f6c6f72 2e61202a 3d20755f 6f706163 olor.a *= u_opac │ │ │ │ + 0x00d5ce70 6974793b 200a2020 2020765f 46726167 ity; . v_Frag │ │ │ │ + 0x00d5ce80 436f6c6f 72203d20 66696e61 6c436f6c Color = finalCol │ │ │ │ + 0x00d5ce90 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d5cea0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5ceb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5cec0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5ced0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5cee0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5cef0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5cf00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5cf10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5cf20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5cf30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5cf40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5cf50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5cf60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5cf70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5cf80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5cf90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5cfa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5cfb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5cfc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5cfd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5cfe0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5cff0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d5d000 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d5d010 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ + 0x00d5d020 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ + 0x00d5d030 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ + 0x00d5d040 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d5d050 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ + 0x00d5d060 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d5d070 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ + 0x00d5d080 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d5d090 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ + 0x00d5d0a0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d5d0b0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d5d0c0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d5d0d0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d5d0e0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d5d0f0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d5d100 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d5d110 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d5d120 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d5d130 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d5d140 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d5d150 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d5d160 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d5d170 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d5d180 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d5d190 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d5d1a0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d5d1b0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d5d1c0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d5d1d0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d5d1e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5d1f0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d5d200 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d5d210 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d5d220 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d5d230 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d5d240 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d5d250 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d5d260 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d5d270 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d5d280 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d5d290 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d5d2a0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d5d2b0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d5d2c0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d5d2d0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d5d2e0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d5d2f0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d5d300 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d5d310 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d5d320 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d5d330 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d5d340 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d5d350 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d5d360 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d5d370 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d5d380 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d5d390 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d5d3a0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d5d3b0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d5d3c0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d5d3d0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d5d3e0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d5d3f0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d5d400 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d5d410 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d5d420 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d5d430 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d5d440 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d5d450 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d5d460 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d5d470 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d5d480 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d5d490 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d5d4a0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d5d4b0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d5d4c0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d5d4d0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d5d4e0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d5d4f0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d5d500 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d5d510 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d5d520 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d5d530 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d5d540 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d5d550 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d5d560 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d5d570 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d5d580 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d5d590 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d5d5a0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d5d5b0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d5d5c0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d5d5d0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d5d5e0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d5d5f0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d5d600 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d5d610 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d5d620 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d5d630 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d5d640 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d5d650 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ + 0x00d5d660 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ + 0x00d5d670 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ + 0x00d5d680 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ + 0x00d5d690 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ + 0x00d5d6a0 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ + 0x00d5d6b0 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ + 0x00d5d6c0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d5d6d0 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ + 0x00d5d6e0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d5d6f0 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ + 0x00d5d700 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ + 0x00d5d710 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ + 0x00d5d720 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ + 0x00d5d730 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ + 0x00d5d740 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00d5d750 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00d5d760 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5d770 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5d780 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5d790 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5d7a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5d7b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5d7c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5d7d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5d7e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5d7f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5d800 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5d810 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5d820 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5d830 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5d840 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5d850 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5d860 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5d870 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5d880 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5d890 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5d8a0 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00d5d8b0 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00d5d8c0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d5d8d0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d5d8e0 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00d5d8f0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d5d900 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00d5d910 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d5d920 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d5d930 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d5d940 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00d5d950 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00d5d960 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d5d970 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d5d980 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d5d990 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ + 0x00d5d9a0 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ + 0x00d5d9b0 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ + 0x00d5d9c0 6f722e61 202a2076 5f696e74 656e7369 or.a * v_intensi │ │ │ │ + 0x00d5d9d0 7479293b 200a2020 7d200a00 00000000 ty); . } ...... │ │ │ │ + 0x00d5d9e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5d9f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5da00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5da10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5da20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5da30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5da40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5da50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5da60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5da70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5da80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5da90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5daa0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5dab0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5dac0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5dad0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5dae0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5daf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5db00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5db10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5db20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5db30 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5db40 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d5db50 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d5db60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d5db70 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00d5db80 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00d5db90 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00d5dba0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00d5dbb0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d5dbc0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d5dbd0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d5dbe0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d5dbf0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d5dc00 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d5dc10 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d5dc20 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d5dc30 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d5dc40 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d5dc50 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d5dc60 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d5dc70 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d5dc80 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5dc90 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d5dca0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d5dcb0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d5dcc0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d5dcd0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d5dce0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d5dcf0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d5dd00 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d5dd10 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d5dd20 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d5dd30 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d5dd40 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d5dd50 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d5dd60 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d5dd70 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d5dd80 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d5dd90 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d5dda0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d5ddb0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d5ddc0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d5ddd0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d5dde0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d5ddf0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d5de00 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d5de10 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d5de20 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d5de30 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d5de40 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d5de50 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d5de60 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5de70 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d5de80 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d5de90 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d5dea0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d5deb0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d5dec0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d5ded0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d5dee0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d5def0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d5df00 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d5df10 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d5df20 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d5df30 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d5df40 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d5df50 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d5df60 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d5df70 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d5df80 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d5df90 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d5dfa0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d5dfb0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d5dfc0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d5dfd0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d5dfe0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d5dff0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d5e000 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d5e010 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d5e020 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d5e030 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d5e040 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d5e050 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d5e060 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d5e070 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d5e080 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d5e090 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d5e0a0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d5e0b0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d5e0c0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d5e0d0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d5e0e0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d5e0f0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d5e100 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d5e110 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d5e120 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d5e130 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d5e140 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d5e150 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d5e160 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d5e170 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d5e180 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d5e190 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d5e1a0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d5e1b0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d5e1c0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d5e1d0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d5e1e0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d5e1f0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d5e200 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d5e210 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d5e220 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d5e230 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d5e240 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d5e250 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d5e260 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d5e270 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d5e280 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d5e290 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d5e2a0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d5e2b0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d5e2c0 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00d5e2d0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d5e2e0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d5e2f0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d5e300 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00d5e310 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ + 0x00d5e320 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ + 0x00d5e330 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ + 0x00d5e340 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d5e350 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ + 0x00d5e360 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00d5e370 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d5e380 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d5e390 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00d5e3a0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00d5e3b0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00d5e3c0 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ + 0x00d5e3d0 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ + 0x00d5e3e0 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ + 0x00d5e3f0 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ + 0x00d5e400 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ + 0x00d5e410 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ + 0x00d5e420 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ + 0x00d5e430 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d5e440 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5e450 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5e460 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5e470 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5e480 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5e490 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5e4a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5e4b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5e4c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5e4d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5e4e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5e4f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5e500 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5e510 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5e520 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5e530 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5e540 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5e550 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5e560 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5e570 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5e580 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5e590 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d5e5a0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d5e5b0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d5e5c0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d5e5d0 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ + 0x00d5e5e0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d5e5f0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d5e600 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d5e610 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d5e620 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d5e630 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d5e640 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d5e650 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d5e660 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ + 0x00d5e670 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d5e680 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00d5e690 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ + 0x00d5e6a0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d5e6b0 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ + 0x00d5e6c0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d5e6d0 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ + 0x00d5e6e0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d5e6f0 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ + 0x00d5e700 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d5e710 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ + 0x00d5e720 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ + 0x00d5e730 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ + 0x00d5e740 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d5e750 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ + 0x00d5e760 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d5e770 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ + 0x00d5e780 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5e790 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d5e7a0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d5e7b0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d5e7c0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d5e7d0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d5e7e0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d5e7f0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d5e800 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d5e810 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d5e820 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d5e830 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d5e840 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d5e850 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5e860 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d5e870 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d5e880 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d5e890 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d5e8a0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d5e8b0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d5e8c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d5e8d0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d5e8e0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d5e8f0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d5e900 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d5e910 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d5e920 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5e930 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d5e940 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d5e950 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5e960 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d5e970 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d5e980 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d5e990 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d5e9a0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d5e9b0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d5e9c0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d5e9d0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d5e9e0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d5e9f0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d5ea00 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d5ea10 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d5ea20 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d5ea30 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d5ea40 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d5ea50 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d5ea60 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d5ea70 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d5ea80 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d5ea90 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d5eaa0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d5eab0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d5eac0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d5ead0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d5eae0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d5eaf0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d5eb00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5eb10 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d5eb20 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d5eb30 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d5eb40 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d5eb50 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d5eb60 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d5eb70 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d5eb80 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d5eb90 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d5eba0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d5ebb0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d5ebc0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d5ebd0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d5ebe0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d5ebf0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d5ec00 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d5ec10 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d5ec20 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d5ec30 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d5ec40 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d5ec50 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d5ec60 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d5ec70 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d5ec80 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d5ec90 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d5eca0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d5ecb0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d5ecc0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d5ecd0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d5ece0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d5ecf0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d5ed00 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d5ed10 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d5ed20 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d5ed30 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d5ed40 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ + 0x00d5ed50 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ + 0x00d5ed60 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00d5ed70 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ + 0x00d5ed80 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ + 0x00d5ed90 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ + 0x00d5eda0 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ + 0x00d5edb0 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ + 0x00d5edc0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d5edd0 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ + 0x00d5ede0 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ + 0x00d5edf0 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ + 0x00d5ee00 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ + 0x00d5ee10 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ + 0x00d5ee20 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ + 0x00d5ee30 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ + 0x00d5ee40 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ + 0x00d5ee50 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d5ee60 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ + 0x00d5ee70 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ + 0x00d5ee80 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ + 0x00d5ee90 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ + 0x00d5eea0 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ + 0x00d5eeb0 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ + 0x00d5eec0 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ + 0x00d5eed0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00d5eee0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00d5eef0 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d5ef00 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d5ef10 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00d5ef20 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d5ef30 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ + 0x00d5ef40 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ + 0x00d5ef50 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ + 0x00d5ef60 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d5ef70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5ef80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5ef90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5efa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5efb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5efc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5efd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5efe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5eff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5f000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5f010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5f020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5f030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5f040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5f050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5f060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5f070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5f080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5f090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5f0a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5f0b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5f0c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5f0d0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d5f0e0 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00d5f0f0 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ + 0x00d5f100 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ + 0x00d5f110 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ + 0x00d5f120 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00d5f130 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ + 0x00d5f140 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ + 0x00d5f150 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ + 0x00d5f160 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d5f170 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d5f180 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00d5f190 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d5f1a0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d5f1b0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d5f1c0 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00d5f1d0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d5f1e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5f1f0 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00d5f200 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00d5f210 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00d5f220 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d5f230 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00d5f240 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d5f250 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5f260 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d5f270 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00d5f280 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5f290 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00d5f2a0 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00d5f2b0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d5f2c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d5f2d0 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00d5f2e0 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00d5f2f0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d5f300 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00d5f310 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00d5f320 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d5f330 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00d5f340 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00d5f350 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00d5f360 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00d5f370 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00d5f380 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d5f390 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d5f3a0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d5f3b0 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00d5f3c0 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00d5f3d0 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00d5f3e0 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00d5f3f0 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00d5f400 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5f410 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00d5f420 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00d5f430 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d5f440 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00d5f450 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00d5f460 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d5f470 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00d5f480 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00d5f490 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00d5f4a0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d5f4b0 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00d5f4c0 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00d5f4d0 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00d5f4e0 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00d5f4f0 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00d5f500 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00d5f510 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00d5f520 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00d5f530 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00d5f540 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00d5f550 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00d5f560 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d5f570 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d5f580 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00d5f590 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00d5f5a0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d5f5b0 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00d5f5c0 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00d5f5d0 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00d5f5e0 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00d5f5f0 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00d5f600 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00d5f610 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00d5f620 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00d5f630 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00d5f640 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00d5f650 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d5f660 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00d5f670 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00d5f680 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d5f690 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00d5f6a0 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00d5f6b0 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00d5f6c0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d5f6d0 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00d5f6e0 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d5f6f0 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ + 0x00d5f700 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ + 0x00d5f710 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ + 0x00d5f720 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d5f730 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d5f740 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00d5f750 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ + 0x00d5f760 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00d5f770 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00d5f780 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00d5f790 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00d5f7a0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d5f7b0 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00d5f7c0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00d5f7d0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00d5f7e0 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ + 0x00d5f7f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5f800 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5f810 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5f820 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5f830 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5f840 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5f850 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5f860 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5f870 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5f880 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5f890 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5f8a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5f8b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5f8c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5f8d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5f8e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5f8f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5f900 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5f910 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5f920 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5f930 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5f940 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5f950 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d5f960 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d5f970 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d5f980 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d5f990 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d5f9a0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d5f9b0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00d5f9c0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d5f9d0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d5f9e0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d5f9f0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d5fa00 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d5fa10 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d5fa20 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00d5fa30 6f6f7264 73293b20 0a202020 2066696e oords); . fin │ │ │ │ + 0x00d5fa40 616c436f 6c6f722e 61202a3d 20755f6f alColor.a *= u_o │ │ │ │ + 0x00d5fa50 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ + 0x00d5fa60 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ + 0x00d5fa70 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ + 0x00d5fa80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5fa90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5faa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5fab0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5fac0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5fad0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5fae0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5faf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5fb00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5fb10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5fb20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5fb30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5fb40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5fb50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5fb60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5fb70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5fb80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5fb90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5fba0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5fbb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5fbc0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00d5fbd0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d5fbe0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d5fbf0 20755f63 6f6c6f72 3b200a20 20636f6e u_color; . con │ │ │ │ + 0x00d5fc00 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d5fc10 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d5fc20 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d5fc30 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ + 0x00d5fc40 46726167 436f6c6f 72203d20 755f636f FragColor = u_co │ │ │ │ + 0x00d5fc50 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00d5fc60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5fc70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5fc80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5fc90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5fca0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5fcb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5fcc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5fcd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5fce0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5fcf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5fd00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5fd10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5fd20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5fd30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5fd40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5fd50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5fd60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5fd70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5fd80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5fd90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5fda0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5fdb0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d5fdc0 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d5fdd0 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00d5fde0 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ + 0x00d5fdf0 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d5fe00 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ + 0x00d5fe10 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00d5fe20 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00d5fe30 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00d5fe40 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00d5fe50 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d5fe60 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d5fe70 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00d5fe80 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00d5fe90 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ + 0x00d5fea0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d5feb0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d5fec0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d5fed0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d5fee0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d5fef0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d5ff00 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d5ff10 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d5ff20 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d5ff30 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d5ff40 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d5ff50 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d5ff60 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d5ff70 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d5ff80 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d5ff90 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d5ffa0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d5ffb0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d5ffc0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d5ffd0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5ffe0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d5fff0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d60000 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d60010 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d60020 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d60030 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d60040 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d60050 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d60060 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d60070 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d60080 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d60090 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d600a0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d600b0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d600c0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d600d0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d600e0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d600f0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d60100 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d60110 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d60120 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d60130 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d60140 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d60150 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d60160 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d60170 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d60180 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d60190 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d601a0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d601b0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d601c0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d601d0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d601e0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d601f0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d60200 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d60210 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d60220 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d60230 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d60240 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d60250 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d60260 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d60270 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d60280 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d60290 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d602a0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d602b0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d602c0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d602d0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d602e0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d602f0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d60300 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d60310 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d60320 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d60330 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d60340 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d60350 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d60360 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d60370 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d60380 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d60390 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d603a0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d603b0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d603c0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d603d0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d603e0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d603f0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d60400 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d60410 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d60420 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d60430 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d60440 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ + 0x00d60450 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ + 0x00d60460 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ + 0x00d60470 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ + 0x00d60480 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ + 0x00d60490 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ + 0x00d604a0 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ + 0x00d604b0 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ + 0x00d604c0 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ + 0x00d604d0 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ + 0x00d604e0 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ + 0x00d604f0 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ + 0x00d60500 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ + 0x00d60510 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ + 0x00d60520 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ + 0x00d60530 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ + 0x00d60540 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ + 0x00d60550 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ + 0x00d60560 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ + 0x00d60570 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ + 0x00d60580 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00d60590 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00d605a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d605b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d605c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d605d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d605e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d605f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d60600 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d60610 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d60620 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d60630 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d60640 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d60650 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d60660 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d60670 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d60680 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d60690 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d606a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d606b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d606c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d606d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d606e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d606f0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d60700 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d60710 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d60720 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d60730 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d60740 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d60750 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d60760 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d60770 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d60780 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d60790 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d607a0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d607b0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d607c0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d607d0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d607e0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d607f0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d60800 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d60810 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d60820 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d60830 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d60840 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d60850 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d60860 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d60870 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d60880 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d60890 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d608a0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d608b0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d608c0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d608d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d608e0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d608f0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d60900 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d60910 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d60920 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d60930 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d60940 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d60950 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d60960 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d60970 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d60980 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d60990 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d609a0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d609b0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d609c0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d609d0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d609e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d609f0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d60a00 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d60a10 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d60a20 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d60a30 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d60a40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d60a50 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d60a60 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d60a70 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d60a80 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d60a90 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d60aa0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d60ab0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d60ac0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d60ad0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d60ae0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d60af0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d60b00 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d60b10 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d60b20 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d60b30 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d60b40 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d60b50 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d60b60 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d60b70 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d60b80 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d60b90 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d60ba0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d60bb0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d60bc0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d60bd0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d60be0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d60bf0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d60c00 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d60c10 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d60c20 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d60c30 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d60c40 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d60c50 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d60c60 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d60c70 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d60c80 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d60c90 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d60ca0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d60cb0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d60cc0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d60cd0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d60ce0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d60cf0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d60d00 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d60d10 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d60d20 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d60d30 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d60d40 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d60d50 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d60d60 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d60d70 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d60d80 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d60d90 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d60da0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d60db0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d60dc0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d60dd0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d60de0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d60df0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d60e00 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00d60e10 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d60e20 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ + 0x00d60e30 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ + 0x00d60e40 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ + 0x00d60e50 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ + 0x00d60e60 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ + 0x00d60e70 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ + 0x00d60e80 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ + 0x00d60e90 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d60ea0 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ + 0x00d60eb0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d60ec0 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ + 0x00d60ed0 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ + 0x00d60ee0 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ + 0x00d60ef0 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ + 0x00d60f00 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ + 0x00d60f10 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ + 0x00d60f20 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ + 0x00d60f30 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d60f40 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00d60f50 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ + 0x00d60f60 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ + 0x00d60f70 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d60f80 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ + 0x00d60f90 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d60fa0 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ + 0x00d60fb0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d60fc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d60fd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d60fe0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d60ff0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d61000 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d61010 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d61020 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d61030 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d61040 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d61050 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d61060 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d61070 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d61080 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d61090 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d610a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d610b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d610c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d610d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d610e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d610f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d61100 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d61110 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d61120 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d61130 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d61140 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d61150 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d61160 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d61170 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d61180 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d61190 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d611a0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d611b0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d611c0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d611d0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d611e0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d611f0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d61200 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d61210 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d61220 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d61230 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d61240 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d61250 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d61260 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d61270 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d61280 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d61290 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d612a0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d612b0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d612c0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d612d0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d612e0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d612f0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d61300 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ + 0x00d61310 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ + 0x00d61320 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d61330 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ + 0x00d61340 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ + 0x00d61350 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ + 0x00d61360 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ + 0x00d61370 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d61380 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d61390 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d613a0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d613b0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d613c0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d613d0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d613e0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d613f0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d61400 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d61410 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d61420 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d61430 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d61440 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d61450 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d61460 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d61470 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d61480 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d61490 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d614a0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d614b0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d614c0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d614d0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d614e0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d614f0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d61500 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d61510 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d61520 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d61530 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d61540 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d61550 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d61560 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d61570 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d61580 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d61590 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d615a0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d615b0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d615c0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d615d0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d615e0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d615f0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d61600 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d61610 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d61620 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d61630 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d61640 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d61650 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d61660 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d61670 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d61680 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d61690 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d616a0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d616b0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d616c0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d616d0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d616e0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d616f0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d61700 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d61710 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d61720 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d61730 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d61740 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d61750 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d61760 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d61770 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d61780 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d61790 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d617a0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d617b0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d617c0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d617d0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d617e0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d617f0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d61800 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d61810 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d61820 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d61830 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d61840 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d61850 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d61860 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d61870 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d61880 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d61890 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d618a0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d618b0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d618c0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d618d0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d618e0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d618f0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d61900 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ + 0x00d61910 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ + 0x00d61920 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ + 0x00d61930 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ + 0x00d61940 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ + 0x00d61950 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ + 0x00d61960 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ + 0x00d61970 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ + 0x00d61980 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ + 0x00d61990 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ + 0x00d619a0 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ + 0x00d619b0 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ + 0x00d619c0 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ + 0x00d619d0 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ + 0x00d619e0 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ + 0x00d619f0 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ + 0x00d61a00 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ + 0x00d61a10 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ + 0x00d61a20 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ + 0x00d61a30 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d61a40 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d61a50 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ + 0x00d61a60 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d61a70 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d61a80 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ + 0x00d61a90 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ + 0x00d61aa0 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ + 0x00d61ab0 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ + 0x00d61ac0 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ + 0x00d61ad0 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ + 0x00d61ae0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d61af0 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ + 0x00d61b00 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d61b10 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ + 0x00d61b20 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ + 0x00d61b30 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ + 0x00d61b40 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ + 0x00d61b50 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ + 0x00d61b60 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ + 0x00d61b70 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ + 0x00d61b80 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ + 0x00d61b90 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d61ba0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d61bb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d61bc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d61bd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d61be0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d61bf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d61c00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d61c10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d61c20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d61c30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d61c40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d61c50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d61c60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d61c70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d61c80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d61c90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d61ca0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d61cb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d61cc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d61cd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d61ce0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d61cf0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d61d00 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d61d10 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d61d20 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d61d30 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ + 0x00d61d40 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ + 0x00d61d50 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00d61d60 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ + 0x00d61d70 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ + 0x00d61d80 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ + 0x00d61d90 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d61da0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d61db0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d61dc0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d61dd0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d61de0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d61df0 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00d61e00 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d61e10 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d61e20 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d61e30 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ + 0x00d61e40 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ + 0x00d61e50 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ + 0x00d61e60 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ + 0x00d61e70 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ + 0x00d61e80 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d61e90 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d61ea0 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00d61eb0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d61ec0 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d61ed0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d61ee0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d61ef0 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00d61f00 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d61f10 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00d61f20 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00d61f30 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d61f40 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d61f50 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00d61f60 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d61f70 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d61f80 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00d61f90 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00d61fa0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d61fb0 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00d61fc0 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00d61fd0 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00d61fe0 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00d61ff0 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00d62000 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d62010 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00d62020 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00d62030 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d62040 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00d62050 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00d62060 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d62070 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00d62080 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00d62090 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00d620a0 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00d620b0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d620c0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d620d0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d620e0 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00d620f0 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00d62100 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00d62110 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00d62120 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d62130 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00d62140 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d62150 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00d62160 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00d62170 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00d62180 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00d62190 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00d621a0 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00d621b0 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00d621c0 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00d621d0 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00d621e0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d621f0 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00d62200 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00d62210 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00d62220 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00d62230 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d62240 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00d62250 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00d62260 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00d62270 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00d62280 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00d62290 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d622a0 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00d622b0 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00d622c0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d622d0 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00d622e0 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00d622f0 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00d62300 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00d62310 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00d62320 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d62330 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00d62340 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d62350 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00d62360 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00d62370 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00d62380 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00d62390 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00d623a0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d623b0 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00d623c0 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00d623d0 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00d623e0 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00d623f0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d62400 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00d62410 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d62420 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ + 0x00d62430 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ + 0x00d62440 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ + 0x00d62450 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ + 0x00d62460 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00d62470 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d62480 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00d62490 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00d624a0 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00d624b0 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ + 0x00d624c0 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ + 0x00d624d0 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ + 0x00d624e0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d624f0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d62500 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00d62510 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d62520 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00d62530 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ + 0x00d62540 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d62550 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d62560 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00d62570 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ + 0x00d62580 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ + 0x00d62590 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ + 0x00d625a0 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ + 0x00d625b0 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ + 0x00d625c0 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ + 0x00d625d0 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ + 0x00d625e0 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ + 0x00d625f0 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ + 0x00d62600 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d62610 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00d62620 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ + 0x00d62630 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ + 0x00d62640 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ + 0x00d62650 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ + 0x00d62660 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ + 0x00d62670 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ + 0x00d62680 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d62690 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d626a0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d626b0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d626c0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d626d0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d626e0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d626f0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d62700 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d62710 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d62720 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d62730 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d62740 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d62750 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d62760 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d62770 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d62780 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d62790 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d627a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d627b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d627c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d627d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d627e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d627f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d62800 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d62810 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d62820 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d62830 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d62840 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d62850 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d62860 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d62870 63342076 5f6e6f72 6d616c3b 200a2020 c4 v_normal; . │ │ │ │ + 0x00d62880 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00d62890 46200a20 20696e20 4c4f575f 50207665 F . in LOW_P ve │ │ │ │ + 0x00d628a0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d628b0 656c7365 200a2020 696e2076 65633220 else . in vec2 │ │ │ │ + 0x00d628c0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d628d0 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00d628e0 706c6572 32442075 5f636f6c 6f725465 pler2D u_colorTe │ │ │ │ + 0x00d628f0 783b200a 20202365 6e646966 200a2020 x; . #endif . │ │ │ │ + 0x00d62900 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d62910 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d62920 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d62930 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d62940 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d62950 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d62960 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d62970 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d62980 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d62990 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d629a0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d629b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d629c0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d629d0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d629e0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d629f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d62a00 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d62a10 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00d62a20 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00d62a30 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00d62a40 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d62a50 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d62a60 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d62a70 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ + 0x00d62a80 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ + 0x00d62a90 50207665 63342063 6f6c6f72 203d2076 P vec4 color = v │ │ │ │ + 0x00d62aa0 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00d62ab0 200a2020 20204c4f 575f5020 76656334 . LOW_P vec4 │ │ │ │ + 0x00d62ac0 20636f6c 6f72203d 20746578 74757265 color = texture │ │ │ │ + 0x00d62ad0 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ + 0x00d62ae0 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00d62af0 0a202023 656e6469 66200a20 20202066 . #endif . f │ │ │ │ + 0x00d62b00 6c6f6174 20723120 3d202876 5f6e6f72 loat r1 = (v_nor │ │ │ │ + 0x00d62b10 6d616c2e 7a202d20 61615069 78656c73 mal.z - aaPixels │ │ │ │ + 0x00d62b20 436f756e 7429202a 2028765f 6e6f726d Count) * (v_norm │ │ │ │ + 0x00d62b30 616c2e7a 202d2061 61506978 656c7343 al.z - aaPixelsC │ │ │ │ + 0x00d62b40 6f756e74 293b200a 20202020 666c6f61 ount); . floa │ │ │ │ + 0x00d62b50 74207232 203d2076 5f6e6f72 6d616c2e t r2 = v_normal. │ │ │ │ + 0x00d62b60 78202a20 765f6e6f 726d616c 2e78202b x * v_normal.x + │ │ │ │ + 0x00d62b70 20765f6e 6f726d61 6c2e7920 2a20765f v_normal.y * v_ │ │ │ │ + 0x00d62b80 6e6f726d 616c2e79 3b200a20 20202066 normal.y; . f │ │ │ │ + 0x00d62b90 6c6f6174 20723320 3d20765f 6e6f726d loat r3 = v_norm │ │ │ │ + 0x00d62ba0 616c2e7a 202a2076 5f6e6f72 6d616c2e al.z * v_normal. │ │ │ │ + 0x00d62bb0 7a3b200a 20202020 666c6f61 7420616c z; . float al │ │ │ │ + 0x00d62bc0 70686120 3d206d69 78287374 65702872 pha = mix(step(r │ │ │ │ + 0x00d62bd0 332c2072 32292c20 736d6f6f 74687374 3, r2), smoothst │ │ │ │ + 0x00d62be0 65702872 312c2072 332c2072 32292c20 ep(r1, r3, r2), │ │ │ │ + 0x00d62bf0 765f6e6f 726d616c 2e77293b 200a2020 v_normal.w); . │ │ │ │ + 0x00d62c00 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ + 0x00d62c10 616c436f 6c6f7220 3d20636f 6c6f723b alColor = color; │ │ │ │ + 0x00d62c20 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00d62c30 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ + 0x00d62c40 61202a20 755f6f70 61636974 79202a20 a * u_opacity * │ │ │ │ + 0x00d62c50 28312e30 202d2061 6c706861 293b200a (1.0 - alpha); . │ │ │ │ + 0x00d62c60 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ + 0x00d62c70 6f722e61 203d3d20 302e3029 200a2020 or.a == 0.0) . │ │ │ │ + 0x00d62c80 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00d62c90 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d62ca0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d62cb0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d62cc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d62cd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d62ce0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d62cf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d62d00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d62d10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d62d20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d62d30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d62d40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d62d50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d62d60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d62d70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d62d80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d62d90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d62da0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d62db0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d62dc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d62dd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d62de0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d62df0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d62e00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d62e10 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d62e20 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d62e30 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d62e40 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d62e50 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d62e60 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d62e70 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d62e80 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00d62e90 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00d62ea0 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00d62eb0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d62ec0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d62ed0 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00d62ee0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d62ef0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d62f00 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00d62f10 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d62f20 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00d62f30 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d62f40 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d62f50 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ + 0x00d62f60 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d62f70 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00d62f80 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00d62f90 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00d62fa0 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ + 0x00d62fb0 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ + 0x00d62fc0 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ + 0x00d62fd0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d62fe0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d62ff0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d63000 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d63010 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d63020 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d63030 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d63040 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d63050 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d63060 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d63070 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d63080 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d63090 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d630a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d630b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d630c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d630d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d630e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d630f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d63100 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d63110 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d63120 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d63130 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d63140 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d63150 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d63160 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d63170 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d63180 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d63190 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d631a0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d631b0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d631c0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d631d0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d631e0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d631f0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d63200 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d63210 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ + 0x00d63220 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ + 0x00d63230 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ + 0x00d63240 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00d63250 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ + 0x00d63260 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d63270 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00d63280 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d63290 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ + 0x00d632a0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d632b0 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ + 0x00d632c0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d632d0 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ + 0x00d632e0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d632f0 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ + 0x00d63300 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ + 0x00d63310 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ + 0x00d63320 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ + 0x00d63330 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ + 0x00d63340 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d63350 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ + 0x00d63360 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d63370 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d63380 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d63390 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d633a0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d633b0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d633c0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d633d0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d633e0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d633f0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d63400 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d63410 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d63420 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d63430 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d63440 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d63450 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d63460 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d63470 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d63480 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d63490 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d634a0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d634b0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d634c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d634d0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d634e0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d634f0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d63500 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d63510 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d63520 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d63530 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d63540 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d63550 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d63560 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d63570 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d63580 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d63590 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d635a0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d635b0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d635c0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d635d0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d635e0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d635f0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d63600 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d63610 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d63620 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d63630 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d63640 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d63650 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d63660 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d63670 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d63680 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d63690 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d636a0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d636b0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d636c0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d636d0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d636e0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d636f0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d63700 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d63710 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d63720 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d63730 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d63740 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d63750 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d63760 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d63770 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d63780 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d63790 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d637a0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d637b0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d637c0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d637d0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d637e0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d637f0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d63800 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d63810 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d63820 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d63830 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d63840 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d63850 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d63860 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d63870 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d63880 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d63890 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d638a0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d638b0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d638c0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d638d0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d638e0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d638f0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d63900 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d63910 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d63920 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d63930 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d63940 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d63950 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ + 0x00d63960 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ + 0x00d63970 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ + 0x00d63980 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ + 0x00d63990 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ + 0x00d639a0 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ + 0x00d639b0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d639c0 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ + 0x00d639d0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d639e0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d639f0 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ + 0x00d63a00 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ + 0x00d63a10 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d63a20 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d63a30 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d63a40 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ + 0x00d63a50 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ + 0x00d63a60 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ + 0x00d63a70 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d63a80 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d63a90 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d63aa0 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d63ab0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d63ac0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d63ad0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d63ae0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d63af0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d63b00 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d63b10 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d63b20 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d63b30 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d63b40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d63b50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d63b60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d63b70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d63b80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d63b90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d63ba0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d63bb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d63bc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d63bd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d63be0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d63bf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d63c00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d63c10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d63c20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d63c30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d63c40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d63c50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d63c60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d63c70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d63c80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d63c90 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d63ca0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d63cb0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d63cc0 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00d63cd0 73742066 6c6f6174 20616150 6978656c st float aaPixel │ │ │ │ + 0x00d63ce0 73436f75 6e74203d 20322e35 3b200a20 sCount = 2.5; . │ │ │ │ + 0x00d63cf0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d63d00 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d63d10 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d63d20 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d63d30 20207665 63342066 696e616c 436f6c6f vec4 finalColo │ │ │ │ + 0x00d63d40 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00d63d50 2020666c 6f617420 736d616c 6c526164 float smallRad │ │ │ │ + 0x00d63d60 69757320 3d20765f 72616469 75732e7a ius = v_radius.z │ │ │ │ + 0x00d63d70 202d2061 61506978 656c7343 6f756e74 - aaPixelsCount │ │ │ │ + 0x00d63d80 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ + 0x00d63d90 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ + 0x00d63da0 74657028 736d616c 6c526164 69757320 tep(smallRadius │ │ │ │ + 0x00d63db0 2a20736d 616c6c52 61646975 732c2076 * smallRadius, v │ │ │ │ + 0x00d63dc0 5f726164 6975732e 7a202a20 765f7261 _radius.z * v_ra │ │ │ │ + 0x00d63dd0 64697573 2e7a2c20 0a202020 20202020 dius.z, . │ │ │ │ + 0x00d63de0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d63df0 20202020 20202020 20646f74 28765f72 dot(v_r │ │ │ │ + 0x00d63e00 61646975 732e7879 2c20765f 72616469 adius.xy, v_radi │ │ │ │ + 0x00d63e10 75732e78 7929293b 200a2020 20206669 us.xy)); . fi │ │ │ │ + 0x00d63e20 6e616c43 6f6c6f72 2e61203d 2066696e nalColor.a = fin │ │ │ │ + 0x00d63e30 616c436f 6c6f722e 61202a20 28312e30 alColor.a * (1.0 │ │ │ │ + 0x00d63e40 202d2073 74657056 616c7565 293b200a - stepValue); . │ │ │ │ + 0x00d63e50 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ + 0x00d63e60 6f722e61 203c2030 2e303129 200a2020 or.a < 0.01) . │ │ │ │ + 0x00d63e70 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00d63e80 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d63e90 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d63ea0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d63eb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d63ec0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d63ed0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d63ee0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d63ef0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d63f00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d63f10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d63f20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d63f30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d63f40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d63f50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d63f60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d63f70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d63f80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d63f90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d63fa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d63fb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d63fc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d63fd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d63fe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d63ff0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d64000 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d64010 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d64020 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d64030 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d64040 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d64050 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d64060 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d64070 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d64080 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d64090 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d640a0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d640b0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d640c0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d640d0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d640e0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d640f0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d64100 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d64110 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d64120 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d64130 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d64140 733b200a 2020636f 6e737420 666c6f61 s; . const floa │ │ │ │ + 0x00d64150 74206b41 6e746961 6c696173 696e6753 t kAntialiasingS │ │ │ │ + 0x00d64160 63616c61 72203d20 302e393b 200a2020 calar = 0.9; . │ │ │ │ + 0x00d64170 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d64180 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d64190 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ + 0x00d641a0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d641b0 20666c6f 61742064 203d2064 6f742876 float d = dot(v │ │ │ │ + 0x00d641c0 5f726164 6975732e 78792c20 765f7261 _radius.xy, v_ra │ │ │ │ + 0x00d641d0 64697573 2e787929 3b200a20 20202076 dius.xy); . v │ │ │ │ + 0x00d641e0 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d641f0 20765f63 6f6c6f72 3b200a20 20202066 v_color; . f │ │ │ │ + 0x00d64200 6c6f6174 20616152 61646975 73203d20 loat aaRadius = │ │ │ │ + 0x00d64210 765f7261 64697573 2e7a202a 206b416e v_radius.z * kAn │ │ │ │ + 0x00d64220 7469616c 69617369 6e675363 616c6172 tialiasingScalar │ │ │ │ + 0x00d64230 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ + 0x00d64240 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ + 0x00d64250 74657028 61615261 64697573 202a2061 tep(aaRadius * a │ │ │ │ + 0x00d64260 61526164 6975732c 20765f72 61646975 aRadius, v_radiu │ │ │ │ + 0x00d64270 732e7a20 2a20765f 72616469 75732e7a s.z * v_radius.z │ │ │ │ + 0x00d64280 2c206429 3b200a20 20202066 696e616c , d); . final │ │ │ │ + 0x00d64290 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ + 0x00d642a0 6f6c6f72 2e61202a 20755f6f 70616369 olor.a * u_opaci │ │ │ │ + 0x00d642b0 7479202a 2028312e 30202d20 73746570 ty * (1.0 - step │ │ │ │ + 0x00d642c0 56616c75 65293b20 0a202020 20765f46 Value); . v_F │ │ │ │ + 0x00d642d0 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ + 0x00d642e0 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ + 0x00d642f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d64300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d64310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d64320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d64330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d64340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d64350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d64360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d64370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d64380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d64390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d643a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d643b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d643c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d643d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d643e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d643f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d64400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d64410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d64420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d64430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d64440 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d64450 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d64460 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d64470 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ + 0x00d64480 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00d64490 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ + 0x00d644a0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d644b0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d644c0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d644d0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d644e0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d644f0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d64500 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ + 0x00d64510 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d64520 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ + 0x00d64530 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d64540 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ + 0x00d64550 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ + 0x00d64560 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ + 0x00d64570 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ + 0x00d64580 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ + 0x00d64590 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ + 0x00d645a0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d645b0 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00d645c0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d645d0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d645e0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d645f0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d64600 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d64610 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d64620 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d64630 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d64640 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d64650 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d64660 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d64670 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d64680 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d64690 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d646a0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d646b0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d646c0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d646d0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d646e0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d646f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d64700 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d64710 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d64720 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d64730 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d64740 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d64750 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d64760 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d64770 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d64780 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d64790 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d647a0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d647b0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d647c0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d647d0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d647e0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d647f0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d64800 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d64810 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d64820 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d64830 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d64840 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d64850 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d64860 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d64870 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d64880 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d64890 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d648a0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d648b0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d648c0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d648d0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d648e0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d648f0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d64900 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d64910 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d64920 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d64930 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d64940 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d64950 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d64960 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d64970 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d64980 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d64990 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d649a0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d649b0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d649c0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d649d0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d649e0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d649f0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d64a00 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d64a10 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d64a20 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d64a30 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d64a40 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d64a50 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d64a60 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d64a70 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d64a80 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d64a90 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d64aa0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d64ab0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d64ac0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d64ad0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d64ae0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d64af0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d64b00 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d64b10 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d64b20 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d64b30 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d64b40 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d64b50 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00d64b60 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00d64b70 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00d64b80 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d64b90 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00d64ba0 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ + 0x00d64bb0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d64bc0 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ + 0x00d64bd0 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ + 0x00d64be0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d64bf0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d64c00 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00d64c10 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ + 0x00d64c20 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00d64c30 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00d64c40 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d64c50 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ + 0x00d64c60 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d64c70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d64c80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d64c90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d64ca0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d64cb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d64cc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d64cd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d64ce0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d64cf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d64d00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d64d10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d64d20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d64d30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d64d40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d64d50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d64d60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d64d70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d64d80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d64d90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d64da0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d64db0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d64dc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d64dd0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d64de0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d64df0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d64e00 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d64e10 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00d64e20 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00d64e30 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00d64e40 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00d64e50 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d64e60 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d64e70 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d64e80 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d64e90 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d64ea0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d64eb0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d64ec0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d64ed0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d64ee0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d64ef0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d64f00 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d64f10 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d64f20 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d64f30 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d64f40 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d64f50 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d64f60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d64f70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d64f80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d64f90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d64fa0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d64fb0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d64fc0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d64fd0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d64fe0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d64ff0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d65000 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d65010 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d65020 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d65030 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d65040 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d65050 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d65060 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d65070 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d65080 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d65090 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d650a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d650b0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d650c0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d650d0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d650e0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d650f0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d65100 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d65110 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d65120 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d65130 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d65140 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d65150 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d65160 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d65170 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d65180 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d65190 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d651a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d651b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d651c0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d651d0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d651e0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d651f0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d65200 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d65210 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d65220 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d65230 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d65240 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d65250 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d65260 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d65270 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d65280 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d65290 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d652a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d652b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d652c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d652d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d652e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d652f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d65300 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d65310 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d65320 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d65330 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d65340 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d65350 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d65360 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d65370 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d65380 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d65390 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d653a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d653b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d653c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d653d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d653e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d653f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d65400 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d65410 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d65420 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d65430 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d65440 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d65450 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d65460 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d65470 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d65480 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d65490 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d654a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d654b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d654c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d654d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d654e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d654f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d65500 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00d65510 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ + 0x00d65520 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ + 0x00d65530 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ + 0x00d65540 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ + 0x00d65550 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ + 0x00d65560 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00d65570 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00d65580 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d65590 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ + 0x00d655a0 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ + 0x00d655b0 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00d655c0 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00d655d0 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00d655e0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d655f0 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00d65600 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00d65610 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d65620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d65630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d65640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d65650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d65660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d65670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d65680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d65690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d656a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d656b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d656c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d656d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d656e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d656f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d65700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d65710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d65720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d65730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d65740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d65750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d65760 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d65770 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d65780 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d65790 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d657a0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d657b0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d657c0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d657d0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d657e0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d657f0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d65800 69666f72 6d207665 63342075 5f726f75 iform vec4 u_rou │ │ │ │ + 0x00d65810 74655061 72616d73 3b200a20 20756e69 teParams; . uni │ │ │ │ + 0x00d65820 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d65830 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d65840 63342075 5f6d6173 6b436f6c 6f723b20 c4 u_maskColor; │ │ │ │ + 0x00d65850 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d65860 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d65870 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d65880 755f6661 6b65436f 6c6f723b 200a2020 u_fakeColor; . │ │ │ │ + 0x00d65890 756e6966 6f726d20 76656334 20755f66 uniform vec4 u_f │ │ │ │ + 0x00d658a0 616b654f 75746c69 6e65436f 6c6f723b akeOutlineColor; │ │ │ │ + 0x00d658b0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d658c0 20755f66 616b6542 6f726465 72733b20 u_fakeBorders; │ │ │ │ + 0x00d658d0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d658e0 755f7061 74746572 6e3b200a 2020756e u_pattern; . un │ │ │ │ + 0x00d658f0 69666f72 6d207665 63322075 5f616e67 iform vec2 u_ang │ │ │ │ + 0x00d65900 6c65436f 7353696e 3b200a20 20756e69 leCosSin; . uni │ │ │ │ + 0x00d65910 666f726d 20666c6f 61742075 5f617272 form float u_arr │ │ │ │ + 0x00d65920 6f774861 6c665769 6474683b 200a2020 owHalfWidth; . │ │ │ │ + 0x00d65930 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d65940 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d65950 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d65960 636f6c6f 72546578 3b200a20 20636f6e colorTex; . con │ │ │ │ + 0x00d65970 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d65980 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d65990 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d659a0 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00d659b0 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ + 0x00d659c0 74657874 75726528 755f636f 6c6f7254 texture(u_colorT │ │ │ │ + 0x00d659d0 65782c20 765f636f 6c6f7254 6578436f ex, v_colorTexCo │ │ │ │ + 0x00d659e0 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ + 0x00d659f0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ + 0x00d65a00 61636974 793b200a 20202020 69662028 acity; . if ( │ │ │ │ + 0x00d65a10 66696e61 6c436f6c 6f722e61 203c2030 finalColor.a < 0 │ │ │ │ + 0x00d65a20 2e303129 200a2020 20202020 64697363 .01) . disc │ │ │ │ + 0x00d65a30 6172643b 200a2020 20206669 6e616c43 ard; . finalC │ │ │ │ + 0x00d65a40 6f6c6f72 203d2076 65633428 6d697828 olor = vec4(mix( │ │ │ │ + 0x00d65a50 66696e61 6c436f6c 6f722e72 67622c20 finalColor.rgb, │ │ │ │ + 0x00d65a60 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ + 0x00d65a70 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ + 0x00d65a80 2066696e 616c436f 6c6f722e 61293b20 finalColor.a); │ │ │ │ + 0x00d65a90 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00d65aa0 203d2066 696e616c 436f6c6f 723b200a = finalColor; . │ │ │ │ + 0x00d65ab0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d65ac0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d65ad0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d65ae0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d65af0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d65b00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d65b10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d65b20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d65b30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d65b40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d65b50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d65b60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d65b70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d65b80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d65b90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d65ba0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d65bb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d65bc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d65bd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d65be0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d65bf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d65c00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d65c10 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d65c20 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d65c30 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d65c40 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d65c50 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00d65c60 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00d65c70 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00d65c80 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00d65c90 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d65ca0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d65cb0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d65cc0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d65cd0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d65ce0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d65cf0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d65d00 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d65d10 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d65d20 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d65d30 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d65d40 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d65d50 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d65d60 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d65d70 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d65d80 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d65d90 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d65da0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d65db0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d65dc0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d65dd0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d65de0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d65df0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d65e00 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d65e10 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d65e20 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d65e30 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d65e40 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d65e50 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d65e60 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d65e70 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d65e80 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d65e90 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d65ea0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d65eb0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d65ec0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d65ed0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d65ee0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d65ef0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d65f00 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d65f10 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d65f20 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d65f30 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d65f40 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d65f50 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d65f60 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d65f70 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d65f80 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d65f90 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d65fa0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d65fb0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d65fc0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d65fd0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d65fe0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d65ff0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d66000 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d66010 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d66020 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d66030 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d66040 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d66050 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d66060 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d66070 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d66080 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d66090 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d660a0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d660b0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d660c0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d660d0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d660e0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d660f0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d66100 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d66110 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d66120 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d66130 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d66140 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d66150 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d66160 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d66170 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d66180 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d66190 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d661a0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d661b0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d661c0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d661d0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d661e0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d661f0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d66200 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d66210 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d66220 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d66230 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d66240 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d66250 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d66260 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d66270 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d66280 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d66290 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d662a0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d662b0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d662c0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d662d0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d662e0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d662f0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d66300 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d66310 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d66320 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d66330 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d66340 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d66350 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d66360 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d66370 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d66380 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d66390 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00d663a0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d663b0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d663c0 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00d663d0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d663e0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00d663f0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d66400 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00d66410 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d66420 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d66430 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00d66440 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00d66450 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00d66460 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00d66470 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00d66480 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d66490 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00d664a0 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00d664b0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d664c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d664d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d664e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d664f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d66500 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d66510 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d66520 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d66530 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d66540 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d66550 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d66560 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d66570 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d66580 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d66590 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d665a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d665b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d665c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d665d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d665e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d665f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d66600 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d66610 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d66620 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d66630 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d66640 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d66650 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d66660 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d66670 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d66680 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d66690 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d666a0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d666b0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d666c0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d666d0 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ + 0x00d666e0 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d666f0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d66700 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ + 0x00d66710 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d66720 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00d66730 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ + 0x00d66740 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d66750 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d66760 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00d66770 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00d66780 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d66790 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d667a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d667b0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00d667c0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d667d0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d667e0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00d667f0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d66800 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00d66810 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00d66820 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00d66830 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00d66840 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00d66850 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00d66860 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d66870 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00d66880 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d66890 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00d668a0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00d668b0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00d668c0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00d668d0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00d668e0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00d668f0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d66900 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00d66910 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00d66920 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d66930 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00d66940 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00d66950 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00d66960 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00d66970 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d66980 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d66990 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d669a0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00d669b0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00d669c0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00d669d0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00d669e0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d669f0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d66a00 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d66a10 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00d66a20 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00d66a30 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00d66a40 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00d66a50 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00d66a60 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00d66a70 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d66a80 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00d66a90 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00d66aa0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d66ab0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00d66ac0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00d66ad0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00d66ae0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00d66af0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d66b00 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00d66b10 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00d66b20 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00d66b30 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00d66b40 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00d66b50 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d66b60 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00d66b70 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00d66b80 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d66b90 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00d66ba0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d66bb0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00d66bc0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00d66bd0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00d66be0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00d66bf0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00d66c00 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00d66c10 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00d66c20 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00d66c30 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00d66c40 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00d66c50 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00d66c60 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00d66c70 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00d66c80 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00d66c90 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00d66ca0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00d66cb0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d66cc0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00d66cd0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00d66ce0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d66cf0 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00d66d00 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ + 0x00d66d10 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ + 0x00d66d20 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ + 0x00d66d30 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ + 0x00d66d40 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d66d50 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00d66d60 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00d66d70 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d66d80 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00d66d90 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ + 0x00d66da0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00d66db0 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ + 0x00d66dc0 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ + 0x00d66dd0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d66de0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d66df0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d66e00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d66e10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d66e20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d66e30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d66e40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d66e50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d66e60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d66e70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d66e80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d66e90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d66ea0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d66eb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d66ec0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d66ed0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d66ee0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d66ef0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d66f00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d66f10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d66f20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d66f30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d66f40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d66f50 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d66f60 72643b20 0a202069 6e207665 63332076 rd; . in vec3 v │ │ │ │ + 0x00d66f70 5f726164 6975733b 200a2020 6f757420 _radius; . out │ │ │ │ + 0x00d66f80 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00d66f90 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d66fa0 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d66fb0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d66fc0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d66fd0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d66fe0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d66ff0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d67000 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00d67010 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d67020 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d67030 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d67040 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00d67050 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d67060 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00d67070 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d67080 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00d67090 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d670a0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d670b0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d670c0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d670d0 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00d670e0 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00d670f0 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00d67100 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d67110 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d67120 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ + 0x00d67130 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d67140 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ + 0x00d67150 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ + 0x00d67160 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d67170 293b200a 20202020 666c6f61 7420736d ); . float sm │ │ │ │ + 0x00d67180 616c6c52 61646975 73203d20 765f7261 allRadius = v_ra │ │ │ │ + 0x00d67190 64697573 2e7a202a 206b416e 7469616c dius.z * kAntial │ │ │ │ + 0x00d671a0 69617369 6e675468 72657368 6f6c643b iasingThreshold; │ │ │ │ + 0x00d671b0 200a2020 2020666c 6f617420 73746570 . float step │ │ │ │ + 0x00d671c0 56616c75 65203d20 736d6f6f 74687374 Value = smoothst │ │ │ │ + 0x00d671d0 65702873 6d616c6c 52616469 7573202a ep(smallRadius * │ │ │ │ + 0x00d671e0 20736d61 6c6c5261 64697573 2c20765f smallRadius, v_ │ │ │ │ + 0x00d671f0 72616469 75732e7a 202a2076 5f726164 radius.z * v_rad │ │ │ │ + 0x00d67200 6975732e 7a2c200a 20202020 20202020 ius.z, . │ │ │ │ + 0x00d67210 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d67220 20202020 20202020 20765f72 61646975 v_radiu │ │ │ │ + 0x00d67230 732e7820 2a20765f 72616469 75732e78 s.x * v_radius.x │ │ │ │ + 0x00d67240 202b2076 5f726164 6975732e 79202a20 + v_radius.y * │ │ │ │ + 0x00d67250 765f7261 64697573 2e79293b 200a2020 v_radius.y); . │ │ │ │ + 0x00d67260 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ + 0x00d67270 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ + 0x00d67280 74657056 616c7565 293b200a 20202020 tepValue); . │ │ │ │ + 0x00d67290 69662028 636f6c6f 722e6120 3c20302e if (color.a < 0. │ │ │ │ + 0x00d672a0 30312920 0a202020 20202064 69736361 01) . disca │ │ │ │ + 0x00d672b0 72643b20 0a202020 20765f46 72616743 rd; . v_FragC │ │ │ │ + 0x00d672c0 6f6c6f72 203d2063 6f6c6f72 3b200a20 olor = color; . │ │ │ │ + 0x00d672d0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d672e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d672f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d67300 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d67310 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d67320 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d67330 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d67340 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d67350 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d67360 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d67370 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d67380 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d67390 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d673a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d673b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d673c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d673d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d673e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d673f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d67400 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d67410 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d67420 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d67430 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d67440 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d67450 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d67460 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00d67470 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00d67480 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00d67490 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d674a0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d674b0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00d674c0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00d674d0 673b200a 2020636f 6e737420 76656333 g; . const vec3 │ │ │ │ + 0x00d674e0 206c6967 68744469 72203d20 76656333 lightDir = vec3 │ │ │ │ + 0x00d674f0 28302e33 31362c20 302e302c 20302e39 (0.316, 0.0, 0.9 │ │ │ │ + 0x00d67500 3438293b 200a2020 636f6e73 7420666c 48); . const fl │ │ │ │ + 0x00d67510 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d67520 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d67530 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d67540 20207b20 0a202020 20666c6f 61742070 { . float p │ │ │ │ + 0x00d67550 686f6e67 44696666 75736520 3d206d61 hongDiffuse = ma │ │ │ │ + 0x00d67560 7828302e 302c202d 646f7428 6c696768 x(0.0, -dot(ligh │ │ │ │ + 0x00d67570 74446972 2c20765f 6e6f726d 616c2929 tDir, v_normal)) │ │ │ │ + 0x00d67580 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00d67590 6f72203d 20766563 34282870 686f6e67 or = vec4((phong │ │ │ │ + 0x00d675a0 44696666 75736520 2a20302e 35202b20 Diffuse * 0.5 + │ │ │ │ + 0x00d675b0 302e3529 202a2075 5f636f6c 6f722e72 0.5) * u_color.r │ │ │ │ + 0x00d675c0 67622c20 755f636f 6c6f722e 61293b20 gb, u_color.a); │ │ │ │ + 0x00d675d0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d675e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d675f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d67600 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d67610 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d67620 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d67630 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d67640 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d67650 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d67660 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d67670 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d67680 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d67690 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d676a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d676b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d676c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d676d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d676e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d676f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d67700 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d67710 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d67720 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d67730 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d67740 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d67750 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d67760 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d67770 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d67780 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d67790 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d677a0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d677b0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d677c0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d677d0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d677e0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d677f0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d67800 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d67810 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d67820 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d67830 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d67840 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d67850 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d67860 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d67870 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d67880 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d67890 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d678a0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d678b0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d678c0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d678d0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d678e0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d678f0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d67900 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d67910 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d67920 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d67930 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d67940 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d67950 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d67960 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d67970 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d67980 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d67990 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d679a0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d679b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d679c0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d679d0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d679e0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d679f0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d67a00 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d67a10 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d67a20 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d67a30 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d67a40 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d67a50 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d67a60 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d67a70 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d67a80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d67a90 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d67aa0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d67ab0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d67ac0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d67ad0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d67ae0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d67af0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d67b00 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d67b10 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d67b20 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d67b30 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d67b40 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d67b50 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d67b60 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d67b70 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d67b80 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d67b90 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d67ba0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d67bb0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d67bc0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d67bd0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d67be0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d67bf0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d67c00 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d67c10 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d67c20 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d67c30 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d67c40 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d67c50 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d67c60 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d67c70 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d67c80 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d67c90 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d67ca0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d67cb0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d67cc0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d67cd0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d67ce0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d67cf0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d67d00 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d67d10 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d67d20 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d67d30 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d67d40 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d67d50 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d67d60 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d67d70 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d67d80 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d67d90 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d67da0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d67db0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d67dc0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d67dd0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d67de0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d67df0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d67e00 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d67e10 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d67e20 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d67e30 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d67e40 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00d67e50 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d67e60 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00d67e70 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ + 0x00d67e80 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ + 0x00d67e90 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d67ea0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d67eb0 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ + 0x00d67ec0 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ + 0x00d67ed0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d67ee0 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ + 0x00d67ef0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00d67f00 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00d67f10 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00d67f20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d67f30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d67f40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d67f50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d67f60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d67f70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d67f80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d67f90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d67fa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d67fb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d67fc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d67fd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d67fe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d67ff0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d68000 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d68010 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d68020 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d68030 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d68040 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d68050 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d68060 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d68070 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d68080 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d68090 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d680a0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d680b0 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00d680c0 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ + 0x00d680d0 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ + 0x00d680e0 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ + 0x00d680f0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d68100 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ + 0x00d68110 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ + 0x00d68120 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d68130 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d68140 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d68150 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d68160 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d68170 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d68180 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d68190 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d681a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d681b0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d681c0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d681d0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d681e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d681f0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d68200 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d68210 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d68220 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d68230 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d68240 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d68250 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d68260 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d68270 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d68280 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d68290 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d682a0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d682b0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d682c0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d682d0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d682e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d682f0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d68300 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d68310 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d68320 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d68330 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d68340 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d68350 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d68360 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d68370 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d68380 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d68390 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d683a0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d683b0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d683c0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d683d0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d683e0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d683f0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d68400 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d68410 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d68420 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d68430 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d68440 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d68450 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d68460 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d68470 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d68480 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d68490 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d684a0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d684b0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d684c0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d684d0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d684e0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d684f0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d68500 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d68510 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d68520 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d68530 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d68540 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d68550 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d68560 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d68570 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d68580 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d68590 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d685a0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d685b0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d685c0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d685d0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d685e0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d685f0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d68600 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d68610 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d68620 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d68630 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d68640 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d68650 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d68660 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d68670 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d68680 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d68690 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d686a0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d686b0 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ + 0x00d686c0 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ + 0x00d686d0 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ + 0x00d686e0 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ + 0x00d686f0 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00d68700 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ + 0x00d68710 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ + 0x00d68720 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ + 0x00d68730 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ + 0x00d68740 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ + 0x00d68750 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ + 0x00d68760 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ + 0x00d68770 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ + 0x00d68780 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ + 0x00d68790 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ + 0x00d687a0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00d687b0 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ + 0x00d687c0 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ + 0x00d687d0 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ + 0x00d687e0 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ + 0x00d687f0 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ + 0x00d68800 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d68810 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d68820 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d68830 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d68840 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d68850 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d68860 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d68870 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d68880 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d68890 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d688a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d688b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d688c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d688d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d688e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d688f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d68900 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d68910 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d68920 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d68930 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d68940 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d68950 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d68960 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d68970 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d68980 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00d68990 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ + 0x00d689a0 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ + 0x00d689b0 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ + 0x00d689c0 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ + 0x00d689d0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00d689e0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d689f0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d68a00 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d68a10 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ + 0x00d68a20 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ + 0x00d68a30 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ + 0x00d68a40 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ + 0x00d68a50 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ + 0x00d68a60 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d68a70 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ + 0x00d68a80 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ + 0x00d68a90 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ + 0x00d68aa0 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ + 0x00d68ab0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00d68ac0 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ + 0x00d68ad0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d68ae0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d68af0 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ + 0x00d68b00 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d68b10 20666c6f 6174204c 203d2064 6f742874 float L = dot(t │ │ │ │ + 0x00d68b20 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d68b30 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00d68b40 72647329 2e726762 2c206b57 65696768 rds).rgb, kWeigh │ │ │ │ + 0x00d68b50 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ + 0x00d68b60 4c6c6566 74203d20 646f7428 74657874 Lleft = dot(text │ │ │ │ + 0x00d68b70 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d68b80 765f6f66 66736574 302e7879 292e7267 v_offset0.xy).rg │ │ │ │ + 0x00d68b90 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ + 0x00d68ba0 20202066 6c6f6174 204c746f 70203d20 float Ltop = │ │ │ │ + 0x00d68bb0 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ + 0x00d68bc0 6c6f7254 65782c20 765f6f66 66736574 lorTex, v_offset │ │ │ │ + 0x00d68bd0 302e7a77 292e7267 622c206b 57656967 0.zw).rgb, kWeig │ │ │ │ + 0x00d68be0 68747329 3b200a20 20202076 65633420 hts); . vec4 │ │ │ │ + 0x00d68bf0 64656c74 613b200a 20202020 64656c74 delta; . delt │ │ │ │ + 0x00d68c00 612e7879 203d2061 6273284c 202d2076 a.xy = abs(L - v │ │ │ │ + 0x00d68c10 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ + 0x00d68c20 293b200a 20202020 76656332 20656467 ); . vec2 edg │ │ │ │ + 0x00d68c30 6573203d 20737465 70286b54 68726573 es = step(kThres │ │ │ │ + 0x00d68c40 686f6c64 2c206465 6c74612e 7879293b hold, delta.xy); │ │ │ │ + 0x00d68c50 200a2020 20206966 2028646f 74286564 . if (dot(ed │ │ │ │ + 0x00d68c60 6765732c 20766563 3228312e 302c2031 ges, vec2(1.0, 1 │ │ │ │ + 0x00d68c70 2e302929 203d3d20 302e3029 200a2020 .0)) == 0.0) . │ │ │ │ + 0x00d68c80 20202020 20206469 73636172 643b200a discard; . │ │ │ │ + 0x00d68c90 20202020 666c6f61 74204c72 69676874 float Lright │ │ │ │ + 0x00d68ca0 203d2064 6f742874 65787475 72652875 = dot(texture(u │ │ │ │ + 0x00d68cb0 5f636f6c 6f725465 782c2076 5f6f6666 _colorTex, v_off │ │ │ │ + 0x00d68cc0 73657431 2e787929 2e726762 2c206b57 set1.xy).rgb, kW │ │ │ │ + 0x00d68cd0 65696768 7473293b 200a2020 2020666c eights); . fl │ │ │ │ + 0x00d68ce0 6f617420 4c626f74 746f6d20 203d2064 oat Lbottom = d │ │ │ │ + 0x00d68cf0 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ + 0x00d68d00 6f725465 782c2076 5f6f6666 73657431 orTex, v_offset1 │ │ │ │ + 0x00d68d10 2e7a7729 2e726762 2c206b57 65696768 .zw).rgb, kWeigh │ │ │ │ + 0x00d68d20 7473293b 200a2020 20206465 6c74612e ts); . delta. │ │ │ │ + 0x00d68d30 7a77203d 20616273 284c202d 20766563 zw = abs(L - vec │ │ │ │ + 0x00d68d40 32284c72 69676874 2c204c62 6f74746f 2(Lright, Lbotto │ │ │ │ + 0x00d68d50 6d29293b 200a2020 20207665 6332206d m)); . vec2 m │ │ │ │ + 0x00d68d60 61784465 6c746120 3d206d61 78286465 axDelta = max(de │ │ │ │ + 0x00d68d70 6c74612e 78792c20 64656c74 612e7a77 lta.xy, delta.zw │ │ │ │ + 0x00d68d80 293b200a 20202020 666c6f61 74204c6c ); . float Ll │ │ │ │ + 0x00d68d90 6566746c 65667420 3d20646f 74287465 eftleft = dot(te │ │ │ │ + 0x00d68da0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d68db0 2c20765f 6f666673 6574322e 7879292e , v_offset2.xy). │ │ │ │ + 0x00d68dc0 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ + 0x00d68dd0 0a202020 20666c6f 6174204c 746f7074 . float Ltopt │ │ │ │ + 0x00d68de0 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ + 0x00d68df0 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ + 0x00d68e00 66667365 74322e7a 77292e72 67622c20 ffset2.zw).rgb, │ │ │ │ + 0x00d68e10 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ + 0x00d68e20 64656c74 612e7a77 203d2061 62732876 delta.zw = abs(v │ │ │ │ + 0x00d68e30 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ + 0x00d68e40 202d2076 65633228 4c6c6566 746c6566 - vec2(Lleftlef │ │ │ │ + 0x00d68e50 742c204c 746f7074 6f702929 3b200a20 t, Ltoptop)); . │ │ │ │ + 0x00d68e60 2020206d 61784465 6c746120 3d206d61 maxDelta = ma │ │ │ │ + 0x00d68e70 78286d61 7844656c 74612e78 792c2064 x(maxDelta.xy, d │ │ │ │ + 0x00d68e80 656c7461 2e7a7729 3b200a20 20202066 elta.zw); . f │ │ │ │ + 0x00d68e90 6c6f6174 2066696e 616c4465 6c746120 loat finalDelta │ │ │ │ + 0x00d68ea0 3d206d61 78286d61 7844656c 74612e78 = max(maxDelta.x │ │ │ │ + 0x00d68eb0 2c206d61 7844656c 74612e79 293b200a , maxDelta.y); . │ │ │ │ + 0x00d68ec0 20202020 65646765 73202a3d 20737465 edges *= ste │ │ │ │ + 0x00d68ed0 70286669 6e616c44 656c7461 2c20534d p(finalDelta, SM │ │ │ │ + 0x00d68ee0 41415f4c 4f43414c 5f434f4e 54524153 AA_LOCAL_CONTRAS │ │ │ │ + 0x00d68ef0 545f4144 41505441 54494f4e 5f464143 T_ADAPTATION_FAC │ │ │ │ + 0x00d68f00 544f5220 2a206465 6c74612e 7879293b TOR * delta.xy); │ │ │ │ + 0x00d68f10 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ + 0x00d68f20 72203d20 76656334 28656467 65732c20 r = vec4(edges, │ │ │ │ + 0x00d68f30 302e302c 20312e30 293b200a 20207d20 0.0, 1.0); . } │ │ │ │ + 0x00d68f40 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d68f50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d68f60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d68f70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d68f80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d68f90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d68fa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d68fb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d68fc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d68fd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d68fe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d68ff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d69000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d69010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d69020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d69030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d69040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d69050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d69060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d69070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d69080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d69090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d690a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d690b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d690c0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d690d0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00d690e0 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00d690f0 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00d69100 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d69110 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00d69120 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d69130 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00d69140 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d69150 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d69160 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d69170 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d69180 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d69190 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d691a0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d691b0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d691c0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d691d0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d691e0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d691f0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d69200 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d69210 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d69220 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d69230 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00d69240 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00d69250 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d69260 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00d69270 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00d69280 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d69290 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d692a0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d692b0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d692c0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d692d0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d692e0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d692f0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d69300 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d69310 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d69320 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d69330 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d69340 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d69350 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d69360 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d69370 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d69380 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d69390 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d693a0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d693b0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d693c0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d693d0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d693e0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d693f0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d69400 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d69410 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d69420 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d69430 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d69440 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d69450 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d69460 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d69470 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d69480 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d69490 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d694a0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d694b0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d694c0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d694d0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d694e0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d694f0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d69500 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d69510 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d69520 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d69530 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d69540 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d69550 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d69560 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d69570 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d69580 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d69590 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d695a0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d695b0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d695c0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d695d0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d695e0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d695f0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d69600 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d69610 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d69620 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d69630 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d69640 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d69650 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d69660 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d69670 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d69680 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d69690 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d696a0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d696b0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d696c0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d696d0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d696e0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d696f0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d69700 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d69710 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d69720 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d69730 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d69740 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d69750 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d69760 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d69770 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d69780 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d69790 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d697a0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d697b0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d697c0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d697d0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d697e0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d697f0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d69800 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d69810 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d69820 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d69830 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ + 0x00d69840 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ + 0x00d69850 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d69860 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00d69870 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00d69880 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d69890 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ + 0x00d698a0 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00d698b0 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ + 0x00d698c0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d698d0 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ + 0x00d698e0 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ + 0x00d698f0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d69900 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00d69910 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00d69920 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ + 0x00d69930 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d69940 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d69950 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d69960 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d69970 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d69980 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d69990 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d699a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d699b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d699c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d699d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d699e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d699f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d69a00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d69a10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d69a20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d69a30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d69a40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d69a50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d69a60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d69a70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d69a80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d69a90 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d69aa0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d69ab0 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ + 0x00d69ac0 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ + 0x00d69ad0 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ + 0x00d69ae0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d69af0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d69b00 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d69b10 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d69b20 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d69b30 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d69b40 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d69b50 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d69b60 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d69b70 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d69b80 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d69b90 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d69ba0 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ + 0x00d69bb0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d69bc0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d69bd0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00d69be0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d69bf0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d69c00 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d69c10 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d69c20 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00d69c30 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d69c40 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00d69c50 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00d69c60 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00d69c70 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d69c80 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00d69c90 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d69ca0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d69cb0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d69cc0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00d69cd0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d69ce0 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00d69cf0 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00d69d00 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d69d10 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00d69d20 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00d69d30 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00d69d40 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d69d50 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00d69d60 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00d69d70 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00d69d80 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00d69d90 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d69da0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00d69db0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00d69dc0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00d69dd0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d69de0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d69df0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d69e00 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d69e10 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00d69e20 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00d69e30 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00d69e40 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00d69e50 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d69e60 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00d69e70 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00d69e80 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d69e90 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00d69ea0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00d69eb0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d69ec0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00d69ed0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00d69ee0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d69ef0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d69f00 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00d69f10 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00d69f20 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00d69f30 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00d69f40 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00d69f50 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00d69f60 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d69f70 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00d69f80 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d69f90 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00d69fa0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00d69fb0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00d69fc0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d69fd0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00d69fe0 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00d69ff0 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00d6a000 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00d6a010 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00d6a020 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00d6a030 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00d6a040 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00d6a050 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00d6a060 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00d6a070 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00d6a080 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d6a090 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00d6a0a0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d6a0b0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00d6a0c0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00d6a0d0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d6a0e0 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00d6a0f0 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00d6a100 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00d6a110 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d6a120 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d6a130 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00d6a140 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ + 0x00d6a150 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ + 0x00d6a160 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ + 0x00d6a170 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00d6a180 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00d6a190 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d6a1a0 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ + 0x00d6a1b0 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ + 0x00d6a1c0 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ + 0x00d6a1d0 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ + 0x00d6a1e0 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ + 0x00d6a1f0 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ + 0x00d6a200 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ + 0x00d6a210 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d6a220 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00d6a230 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ + 0x00d6a240 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6a250 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6a260 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6a270 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6a280 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6a290 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6a2a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6a2b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6a2c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6a2d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6a2e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6a2f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6a300 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6a310 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6a320 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6a330 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6a340 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6a350 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6a360 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6a370 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6a380 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d6a390 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d6a3a0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d6a3b0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d6a3c0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d6a3d0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d6a3e0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d6a3f0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d6a400 23656e64 6966200a 2020696e 20666c6f #endif . in flo │ │ │ │ + 0x00d6a410 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00d6a420 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00d6a430 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d6a440 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d6a450 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d6a460 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d6a470 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d6a480 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d6a490 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d6a4a0 65633420 755f706f 73697469 6f6e3b20 ec4 u_position; │ │ │ │ + 0x00d6a4b0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d6a4c0 755f6c69 6e655061 72616d73 3b200a20 u_lineParams; . │ │ │ │ + 0x00d6a4d0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d6a4e0 5f616363 75726163 793b200a 2020756e _accuracy; . un │ │ │ │ + 0x00d6a4f0 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d6a500 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d6a510 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d6a520 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d6a530 61742075 5f617a69 6d75743b 200a2020 at u_azimut; . │ │ │ │ + 0x00d6a540 636f6e73 7420666c 6f617420 6b416e74 const float kAnt │ │ │ │ + 0x00d6a550 69616c69 6173696e 67546872 6573686f ialiasingThresho │ │ │ │ + 0x00d6a560 6c64203d 20302e39 323b200a 2020636f ld = 0.92; . co │ │ │ │ + 0x00d6a570 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d6a580 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d6a590 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d6a5a0 696e2829 200a2020 7b200a20 20236966 in() . { . #if │ │ │ │ + 0x00d6a5b0 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00d6a5c0 20202020 4c4f575f 50207665 63342063 LOW_P vec4 c │ │ │ │ + 0x00d6a5d0 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ + 0x00d6a5e0 0a202023 656c7365 200a2020 20204c4f . #else . LO │ │ │ │ + 0x00d6a5f0 575f5020 76656334 20636f6c 6f72203d W_P vec4 color = │ │ │ │ + 0x00d6a600 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d6a610 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00d6a620 6f6f7264 293b200a 20202365 6e646966 oord); . #endif │ │ │ │ + 0x00d6a630 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ + 0x00d6a640 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00d6a650 20636f6c 6f722e61 202a3d20 28312e30 color.a *= (1.0 │ │ │ │ + 0x00d6a660 202d2073 6d6f6f74 68737465 70286b41 - smoothstep(kA │ │ │ │ + 0x00d6a670 6e746961 6c696173 696e6754 68726573 ntialiasingThres │ │ │ │ + 0x00d6a680 686f6c64 2c20312e 302c2061 62732876 hold, 1.0, abs(v │ │ │ │ + 0x00d6a690 5f6c656e 67746859 2929293b 200a2020 _lengthY))); . │ │ │ │ + 0x00d6a6a0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d6a6b0 636f6c6f 723b200a 20207d20 0a000000 color; . } .... │ │ │ │ + 0x00d6a6c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6a6d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6a6e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6a6f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6a700 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6a710 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6a720 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6a730 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6a740 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6a750 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6a760 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6a770 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6a780 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6a790 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6a7a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6a7b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6a7c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6a7d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6a7e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6a7f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6a800 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d6a810 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d6a820 6f6c6f72 5465783b 200a2020 696e2076 olorTex; . in v │ │ │ │ + 0x00d6a830 65633320 765f7465 78436f6f 7264733b ec3 v_texCoords; │ │ │ │ + 0x00d6a840 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d6a850 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00d6a860 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d6a870 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d6a880 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d6a890 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ + 0x00d6a8a0 46726167 436f6c6f 72203d20 74657874 FragColor = text │ │ │ │ + 0x00d6a8b0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d6a8c0 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ + 0x00d6a8d0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d6a8e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6a8f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6a900 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6a910 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6a920 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6a930 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6a940 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6a950 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6a960 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6a970 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6a980 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6a990 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6a9a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6a9b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6a9c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6a9d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6a9e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6a9f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6aa00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6aa10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6aa20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6aa30 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d6aa40 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d6aa50 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d6aa60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d6aa70 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ + 0x00d6aa80 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ + 0x00d6aa90 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ + 0x00d6aaa0 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ + 0x00d6aab0 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00d6aac0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d6aad0 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ + 0x00d6aae0 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ + 0x00d6aaf0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00d6ab00 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d6ab10 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d6ab20 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d6ab30 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d6ab40 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d6ab50 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d6ab60 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00d6ab70 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d6ab80 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00d6ab90 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00d6aba0 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00d6abb0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d6abc0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d6abd0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6abe0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d6abf0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00d6ac00 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ + 0x00d6ac10 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ + 0x00d6ac20 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d6ac30 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ + 0x00d6ac40 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ + 0x00d6ac50 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ + 0x00d6ac60 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ + 0x00d6ac70 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d6ac80 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d6ac90 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d6aca0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d6acb0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d6acc0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d6acd0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d6ace0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d6acf0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d6ad00 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d6ad10 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d6ad20 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d6ad30 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d6ad40 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d6ad50 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d6ad60 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d6ad70 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d6ad80 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d6ad90 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d6ada0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d6adb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6adc0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d6add0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d6ade0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d6adf0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d6ae00 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d6ae10 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d6ae20 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d6ae30 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d6ae40 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d6ae50 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d6ae60 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d6ae70 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d6ae80 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d6ae90 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d6aea0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d6aeb0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d6aec0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d6aed0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d6aee0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d6aef0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d6af00 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d6af10 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d6af20 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d6af30 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d6af40 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d6af50 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d6af60 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d6af70 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d6af80 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d6af90 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d6afa0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d6afb0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d6afc0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d6afd0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d6afe0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d6aff0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d6b000 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d6b010 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d6b020 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d6b030 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d6b040 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d6b050 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d6b060 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d6b070 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d6b080 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d6b090 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d6b0a0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d6b0b0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d6b0c0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d6b0d0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d6b0e0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d6b0f0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d6b100 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d6b110 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d6b120 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d6b130 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d6b140 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d6b150 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d6b160 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d6b170 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d6b180 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d6b190 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d6b1a0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d6b1b0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d6b1c0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d6b1d0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d6b1e0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d6b1f0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d6b200 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d6b210 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00d6b220 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00d6b230 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00d6b240 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00d6b250 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00d6b260 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ + 0x00d6b270 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ + 0x00d6b280 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ + 0x00d6b290 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ + 0x00d6b2a0 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ + 0x00d6b2b0 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00d6b2c0 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00d6b2d0 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ + 0x00d6b2e0 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ + 0x00d6b2f0 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ + 0x00d6b300 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ + 0x00d6b310 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d6b320 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ + 0x00d6b330 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00d6b340 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ + 0x00d6b350 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6b360 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6b370 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6b380 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ + 0x00d6b390 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ + 0x00d6b3a0 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ + 0x00d6b3b0 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ + 0x00d6b3c0 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ + 0x00d6b3d0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00d6b3e0 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ + 0x00d6b3f0 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ + 0x00d6b400 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ + 0x00d6b410 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ + 0x00d6b420 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ + 0x00d6b430 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ + 0x00d6b440 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ + 0x00d6b450 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00d6b460 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00d6b470 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d6b480 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d6b490 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d6b4a0 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ + 0x00d6b4b0 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ + 0x00d6b4c0 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ + 0x00d6b4d0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00d6b4e0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00d6b4f0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00d6b500 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d6b510 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d6b520 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00d6b530 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d6b540 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00d6b550 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6b560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6b570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6b580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6b590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6b5a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6b5b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6b5c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6b5d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6b5e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6b5f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6b600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6b610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6b620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6b630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6b640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6b650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6b660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6b670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6b680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6b690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6b6a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6b6b0 63342076 5f746578 436f6f72 64733b20 c4 v_texCoords; │ │ │ │ + 0x00d6b6c0 0a202069 6e207665 63342076 5f6d6173 . in vec4 v_mas │ │ │ │ + 0x00d6b6d0 6b436f6c 6f723b20 0a20206f 75742076 kColor; . out v │ │ │ │ + 0x00d6b6e0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d6b6f0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d6b700 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d6b710 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d6b720 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00d6b730 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00d6b740 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00d6b750 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d6b760 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00d6b770 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d6b780 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00d6b790 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d6b7a0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d6b7b0 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00d6b7c0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00d6b7d0 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00d6b7e0 6c696e65 50617373 3b200a20 20756e69 linePass; . uni │ │ │ │ + 0x00d6b7f0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d6b800 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00d6b810 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d6b820 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d6b830 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d6b840 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d6b850 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ + 0x00d6b860 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d6b870 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ + 0x00d6b880 200a2020 20207665 63342062 67436f6c . vec4 bgCol │ │ │ │ + 0x00d6b890 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d6b8a0 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ + 0x00d6b8b0 6f726473 2e7a7729 202a2076 65633428 ords.zw) * vec4( │ │ │ │ + 0x00d6b8c0 765f6d61 736b436f 6c6f722e 78797a2c v_maskColor.xyz, │ │ │ │ + 0x00d6b8d0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d6b8e0 2066696e 616c436f 6c6f7220 3d206d69 finalColor = mi │ │ │ │ + 0x00d6b8f0 7828636f 6c6f722c 206d6978 28626743 x(color, mix(bgC │ │ │ │ + 0x00d6b900 6f6c6f72 2c20636f 6c6f722c 20636f6c olor, color, col │ │ │ │ + 0x00d6b910 6f722e61 292c2062 67436f6c 6f722e61 or.a), bgColor.a │ │ │ │ + 0x00d6b920 293b200a 20202020 66696e61 6c436f6c ); . finalCol │ │ │ │ + 0x00d6b930 6f722e61 203d2063 6c616d70 28636f6c or.a = clamp(col │ │ │ │ + 0x00d6b940 6f722e61 202b2062 67436f6c 6f722e61 or.a + bgColor.a │ │ │ │ + 0x00d6b950 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00d6b960 6f706163 69747920 2a20765f 6d61736b opacity * v_mask │ │ │ │ + 0x00d6b970 436f6c6f 722e773b 200a2020 20206966 Color.w; . if │ │ │ │ + 0x00d6b980 20286669 6e616c43 6f6c6f72 2e61203c (finalColor.a < │ │ │ │ + 0x00d6b990 20302e30 3129200a 20202020 20206469 0.01) . di │ │ │ │ + 0x00d6b9a0 73636172 643b200a 20202020 765f4672 scard; . v_Fr │ │ │ │ + 0x00d6b9b0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d6b9c0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d6b9d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6b9e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6b9f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6ba00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6ba10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6ba20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6ba30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6ba40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6ba50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6ba60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6ba70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6ba80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6ba90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6baa0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6bab0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6bac0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6bad0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6bae0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6baf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6bb00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6bb10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6bb20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6bb30 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d6bb40 696e2076 65633220 765f7465 78436f6f in vec2 v_texCoo │ │ │ │ + 0x00d6bb50 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d6bb60 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d6bb70 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d6bb80 7472616e 73666f72 6d3b200a 2020756e transform; . un │ │ │ │ + 0x00d6bb90 69666f72 6d206d61 74342075 5f6e6f72 iform mat4 u_nor │ │ │ │ + 0x00d6bba0 6d616c54 72616e73 666f726d 3b200a20 malTransform; . │ │ │ │ + 0x00d6bbb0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d6bbc0 636f6c6f 723b200a 2020756e 69666f72 color; . unifor │ │ │ │ + 0x00d6bbd0 6d207665 63322075 5f746578 436f6f72 m vec2 u_texCoor │ │ │ │ + 0x00d6bbe0 64466c69 7070696e 673b200a 2020756e dFlipping; . un │ │ │ │ + 0x00d6bbf0 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d6bc00 755f636f 6c6f7254 65783b20 0a202063 u_colorTex; . c │ │ │ │ + 0x00d6bc10 6f6e7374 20766563 33206c69 67687444 onst vec3 lightD │ │ │ │ + 0x00d6bc20 6972203d 20766563 3328302e 3331362c ir = vec3(0.316, │ │ │ │ + 0x00d6bc30 20302e30 2c20302e 39343829 3b200a20 0.0, 0.948); . │ │ │ │ + 0x00d6bc40 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d6bc50 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d6bc60 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d6bc70 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d6bc80 2020666c 6f617420 70686f6e 67446966 float phongDif │ │ │ │ + 0x00d6bc90 66757365 203d206d 61782830 2e302c20 fuse = max(0.0, │ │ │ │ + 0x00d6bca0 2d646f74 286c6967 68744469 722c2076 -dot(lightDir, v │ │ │ │ + 0x00d6bcb0 5f6e6f72 6d616c29 293b200a 20202020 _normal)); . │ │ │ │ + 0x00d6bcc0 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ + 0x00d6bcd0 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ + 0x00d6bce0 20765f74 6578436f 6f726473 29202a20 v_texCoords) * │ │ │ │ + 0x00d6bcf0 755f636f 6c6f723b 200a2020 2020765f u_color; . v_ │ │ │ │ + 0x00d6bd00 46726167 436f6c6f 72203d20 76656334 FragColor = vec4 │ │ │ │ + 0x00d6bd10 28287068 6f6e6744 69666675 7365202a ((phongDiffuse * │ │ │ │ + 0x00d6bd20 20302e35 202b2030 2e352920 2a20636f 0.5 + 0.5) * co │ │ │ │ + 0x00d6bd30 6c6f722e 7267622c 20636f6c 6f722e61 lor.rgb, color.a │ │ │ │ + 0x00d6bd40 293b200a 20207d20 0a000000 00000000 ); . } ........ │ │ │ │ + 0x00d6bd50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6bd60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6bd70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6bd80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6bd90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6bda0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6bdb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6bdc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6bdd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6bde0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6bdf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6be00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6be10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6be20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6be30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6be40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6be50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6be60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6be70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6be80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6be90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6bea0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6beb0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d6bec0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d6bed0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d6bee0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d6bef0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d6bf00 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d6bf10 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d6bf20 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d6bf30 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d6bf40 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d6bf50 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d6bf60 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d6bf70 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d6bf80 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d6bf90 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6bfa0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d6bfb0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d6bfc0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d6bfd0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d6bfe0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d6bff0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d6c000 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d6c010 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d6c020 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d6c030 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d6c040 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d6c050 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d6c060 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d6c070 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d6c080 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d6c090 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6c0a0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d6c0b0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d6c0c0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d6c0d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d6c0e0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d6c0f0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d6c100 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d6c110 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d6c120 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d6c130 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6c140 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d6c150 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d6c160 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d6c170 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d6c180 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d6c190 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d6c1a0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d6c1b0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d6c1c0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d6c1d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6c1e0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d6c1f0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d6c200 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6c210 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d6c220 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d6c230 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d6c240 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d6c250 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d6c260 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d6c270 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d6c280 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d6c290 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d6c2a0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d6c2b0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d6c2c0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d6c2d0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d6c2e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d6c2f0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d6c300 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d6c310 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d6c320 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d6c330 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d6c340 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d6c350 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d6c360 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d6c370 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d6c380 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d6c390 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d6c3a0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d6c3b0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d6c3c0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d6c3d0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d6c3e0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d6c3f0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d6c400 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d6c410 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d6c420 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d6c430 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d6c440 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d6c450 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d6c460 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d6c470 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d6c480 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d6c490 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d6c4a0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d6c4b0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d6c4c0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d6c4d0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d6c4e0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d6c4f0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d6c500 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d6c510 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d6c520 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d6c530 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d6c540 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d6c550 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d6c560 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d6c570 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d6c580 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d6c590 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d6c5a0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d6c5b0 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ + 0x00d6c5c0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ + 0x00d6c5d0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00d6c5e0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00d6c5f0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00d6c600 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00d6c610 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d6c620 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d6c630 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d6c640 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00d6c650 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00d6c660 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d6c670 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00d6c680 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6c690 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6c6a0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00d6c6b0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00d6c6c0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00d6c6d0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00d6c6e0 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00d6c6f0 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00d6c700 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6c710 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6c720 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6c730 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6c740 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6c750 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6c760 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6c770 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6c780 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6c790 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6c7a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6c7b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6c7c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6c7d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6c7e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6c7f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6c800 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6c810 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6c820 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6c830 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6c840 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6c850 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d6c860 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d6c870 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d6c880 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d6c890 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ + 0x00d6c8a0 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ + 0x00d6c8b0 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ + 0x00d6c8c0 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d6c8d0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d6c8e0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d6c8f0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d6c900 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d6c910 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d6c920 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ + 0x00d6c930 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ + 0x00d6c940 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ + 0x00d6c950 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6c960 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ + 0x00d6c970 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d6c980 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d6c990 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00d6c9a0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d6c9b0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d6c9c0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d6c9d0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d6c9e0 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00d6c9f0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d6ca00 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00d6ca10 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00d6ca20 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00d6ca30 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d6ca40 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00d6ca50 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d6ca60 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d6ca70 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d6ca80 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00d6ca90 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d6caa0 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00d6cab0 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00d6cac0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d6cad0 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00d6cae0 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00d6caf0 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00d6cb00 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d6cb10 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00d6cb20 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00d6cb30 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00d6cb40 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00d6cb50 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d6cb60 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00d6cb70 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00d6cb80 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00d6cb90 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d6cba0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d6cbb0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d6cbc0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d6cbd0 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00d6cbe0 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00d6cbf0 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00d6cc00 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00d6cc10 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d6cc20 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00d6cc30 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00d6cc40 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d6cc50 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00d6cc60 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00d6cc70 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d6cc80 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00d6cc90 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00d6cca0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d6ccb0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d6ccc0 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00d6ccd0 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00d6cce0 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00d6ccf0 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00d6cd00 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00d6cd10 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00d6cd20 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d6cd30 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00d6cd40 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d6cd50 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00d6cd60 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00d6cd70 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00d6cd80 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d6cd90 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00d6cda0 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00d6cdb0 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00d6cdc0 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00d6cdd0 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00d6cde0 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00d6cdf0 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00d6ce00 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00d6ce10 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00d6ce20 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00d6ce30 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00d6ce40 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d6ce50 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00d6ce60 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d6ce70 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00d6ce80 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00d6ce90 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d6cea0 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00d6ceb0 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00d6cec0 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00d6ced0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d6cee0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d6cef0 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00d6cf00 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00d6cf10 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ + 0x00d6cf20 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ + 0x00d6cf30 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00d6cf40 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ + 0x00d6cf50 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ + 0x00d6cf60 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ + 0x00d6cf70 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ + 0x00d6cf80 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ + 0x00d6cf90 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6cfa0 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ + 0x00d6cfb0 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ + 0x00d6cfc0 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ + 0x00d6cfd0 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ + 0x00d6cfe0 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ + 0x00d6cff0 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ + 0x00d6d000 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ + 0x00d6d010 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ + 0x00d6d020 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ + 0x00d6d030 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ + 0x00d6d040 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d6d050 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d6d060 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d6d070 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ + 0x00d6d080 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ + 0x00d6d090 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ + 0x00d6d0a0 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ + 0x00d6d0b0 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ + 0x00d6d0c0 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ + 0x00d6d0d0 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ + 0x00d6d0e0 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ + 0x00d6d0f0 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ + 0x00d6d100 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d6d110 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6d120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6d130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6d140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6d150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6d160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6d170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6d180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6d190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6d1a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6d1b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6d1c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6d1d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6d1e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6d1f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6d200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6d210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6d220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6d230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6d240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6d250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6d260 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6d270 63322076 5f746578 436f6f72 64733b20 c2 v_texCoords; │ │ │ │ + 0x00d6d280 0a202069 6e207665 63342076 5f636f6c . in vec4 v_col │ │ │ │ + 0x00d6d290 6f723b20 0a20206f 75742076 65633420 or; . out vec4 │ │ │ │ + 0x00d6d2a0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d6d2b0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d6d2c0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d6d2d0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d6d2e0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d6d2f0 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d6d300 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d6d310 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00d6d320 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d6d330 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ + 0x00d6d340 6f726473 293b200a 20202020 765f4672 ords); . v_Fr │ │ │ │ + 0x00d6d350 6167436f 6c6f7220 3d20636f 6c6f7220 agColor = color │ │ │ │ + 0x00d6d360 2a20765f 636f6c6f 723b200a 20207d20 * v_color; . } │ │ │ │ + 0x00d6d370 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6d380 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6d390 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6d3a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6d3b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6d3c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6d3d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6d3e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6d3f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6d400 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6d410 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6d420 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6d430 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6d440 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6d450 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6d460 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6d470 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6d480 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6d490 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6d4a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6d4b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6d4c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6d4d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d6d4e0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d6d4f0 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ + 0x00d6d500 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ + 0x00d6d510 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ + 0x00d6d520 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d6d530 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ + 0x00d6d540 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00d6d550 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d6d560 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d6d570 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ + 0x00d6d580 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ + 0x00d6d590 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00d6d5a0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d6d5b0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d6d5c0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d6d5d0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d6d5e0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d6d5f0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d6d600 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d6d610 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d6d620 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d6d630 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d6d640 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d6d650 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d6d660 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d6d670 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6d680 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d6d690 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ + 0x00d6d6a0 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ + 0x00d6d6b0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00d6d6c0 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ + 0x00d6d6d0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d6d6e0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d6d6f0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d6d700 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d6d710 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d6d720 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d6d730 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d6d740 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d6d750 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d6d760 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d6d770 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d6d780 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6d790 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d6d7a0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d6d7b0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d6d7c0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d6d7d0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d6d7e0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d6d7f0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d6d800 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d6d810 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d6d820 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d6d830 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d6d840 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d6d850 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d6d860 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d6d870 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d6d880 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6d890 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d6d8a0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d6d8b0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d6d8c0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d6d8d0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d6d8e0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d6d8f0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d6d900 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d6d910 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d6d920 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d6d930 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d6d940 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d6d950 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d6d960 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d6d970 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d6d980 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d6d990 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d6d9a0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d6d9b0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d6d9c0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d6d9d0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d6d9e0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d6d9f0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d6da00 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d6da10 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d6da20 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d6da30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6da40 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d6da50 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d6da60 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d6da70 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d6da80 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d6da90 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d6daa0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d6dab0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d6dac0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d6dad0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d6dae0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d6daf0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d6db00 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d6db10 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d6db20 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d6db30 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d6db40 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d6db50 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d6db60 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d6db70 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d6db80 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d6db90 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d6dba0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d6dbb0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d6dbc0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d6dbd0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d6dbe0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d6dbf0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d6dc00 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d6dc10 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d6dc20 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d6dc30 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d6dc40 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d6dc50 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d6dc60 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d6dc70 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d6dc80 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d6dc90 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ + 0x00d6dca0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d6dcb0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d6dcc0 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ + 0x00d6dcd0 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ + 0x00d6dce0 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00d6dcf0 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00d6dd00 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00d6dd10 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00d6dd20 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00d6dd30 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ + 0x00d6dd40 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ + 0x00d6dd50 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d6dd60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d6dd70 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d6dd80 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ + 0x00d6dd90 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ + 0x00d6dda0 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00d6ddb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6ddc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6ddd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6dde0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6ddf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6de00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6de10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6de20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6de30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6de40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6de50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6de60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6de70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6de80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6de90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6dea0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6deb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6dec0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6ded0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6dee0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6def0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6df00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6df10 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00d6df20 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d6df30 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d6df40 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d6df50 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d6df60 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d6df70 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d6df80 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d6df90 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d6dfa0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d6dfb0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d6dfc0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d6dfd0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d6dfe0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d6dff0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d6e000 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d6e010 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d6e020 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d6e030 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d6e040 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d6e050 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d6e060 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d6e070 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d6e080 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d6e090 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d6e0a0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d6e0b0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d6e0c0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d6e0d0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d6e0e0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d6e0f0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d6e100 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d6e110 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00d6e120 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ + 0x00d6e130 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ + 0x00d6e140 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ + 0x00d6e150 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ + 0x00d6e160 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ + 0x00d6e170 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ + 0x00d6e180 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d6e190 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d6e1a0 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d6e1b0 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ + 0x00d6e1c0 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ + 0x00d6e1d0 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ + 0x00d6e1e0 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ + 0x00d6e1f0 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ + 0x00d6e200 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ + 0x00d6e210 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ + 0x00d6e220 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ + 0x00d6e230 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ + 0x00d6e240 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ + 0x00d6e250 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ + 0x00d6e260 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ + 0x00d6e270 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ + 0x00d6e280 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ + 0x00d6e290 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ + 0x00d6e2a0 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00d6e2b0 76656334 206d6169 6e4f7574 6c696e65 vec4 mainOutline │ │ │ │ + 0x00d6e2c0 436f6c6f 72203d20 6d697828 755f6f75 Color = mix(u_ou │ │ │ │ + 0x00d6e2d0 746c696e 65436f6c 6f722c20 755f6661 tlineColor, u_fa │ │ │ │ + 0x00d6e2e0 6b654f75 746c696e 65436f6c 6f722c20 keOutlineColor, │ │ │ │ + 0x00d6e2f0 636f6566 732e7829 3b200a20 2020206d coefs.x); . m │ │ │ │ + 0x00d6e300 61696e4f 75746c69 6e65436f 6c6f7220 ainOutlineColor │ │ │ │ + 0x00d6e310 3d206d69 78286d61 696e4f75 746c696e = mix(mainOutlin │ │ │ │ + 0x00d6e320 65436f6c 6f722c20 755f6661 6b654f75 eColor, u_fakeOu │ │ │ │ + 0x00d6e330 746c696e 65436f6c 6f722c20 636f6566 tlineColor, coef │ │ │ │ + 0x00d6e340 732e7929 3b200a20 20202076 65633420 s.y); . vec4 │ │ │ │ + 0x00d6e350 636f6c6f 72203d20 6d697828 6d697828 color = mix(mix( │ │ │ │ + 0x00d6e360 6d61696e 436f6c6f 722c2076 65633428 mainColor, vec4( │ │ │ │ + 0x00d6e370 765f636f 6c6f722e 7267622c 20312e30 v_color.rgb, 1.0 │ │ │ │ + 0x00d6e380 292c2076 5f636f6c 6f722e61 292c206d ), v_color.a), m │ │ │ │ + 0x00d6e390 61696e43 6f6c6f72 2c207374 65702875 ainColor, step(u │ │ │ │ + 0x00d6e3a0 5f726f75 74655061 72616d73 2e772c20 _routeParams.w, │ │ │ │ + 0x00d6e3b0 302e3029 293b200a 20202020 636f6c6f 0.0)); . colo │ │ │ │ + 0x00d6e3c0 72203d20 6d697828 636f6c6f 722c206d r = mix(color, m │ │ │ │ + 0x00d6e3d0 61696e4f 75746c69 6e65436f 6c6f722c ainOutlineColor, │ │ │ │ + 0x00d6e3e0 20737465 70286b4f 75746c69 6e655468 step(kOutlineTh │ │ │ │ + 0x00d6e3f0 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ + 0x00d6e400 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ + 0x00d6e410 2020636f 6c6f7220 3d206d69 7828636f color = mix(co │ │ │ │ + 0x00d6e420 6c6f722c 206d6169 6e4f7574 6c696e65 lor, mainOutline │ │ │ │ + 0x00d6e430 436f6c6f 722c2073 6d6f6f74 68737465 Color, smoothste │ │ │ │ + 0x00d6e440 70286b4f 75746c69 6e655468 72657368 p(kOutlineThresh │ │ │ │ + 0x00d6e450 6f6c6432 2c206b4f 75746c69 6e655468 old2, kOutlineTh │ │ │ │ + 0x00d6e460 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ + 0x00d6e470 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ + 0x00d6e480 2020636f 6c6f722e 61202a3d 2028312e color.a *= (1. │ │ │ │ + 0x00d6e490 30202d20 736d6f6f 74687374 6570286b 0 - smoothstep(k │ │ │ │ + 0x00d6e4a0 416e7469 616c6961 73696e67 54687265 AntialiasingThre │ │ │ │ + 0x00d6e4b0 73686f6c 642c2031 2e302c20 61627328 shold, 1.0, abs( │ │ │ │ + 0x00d6e4c0 765f6c65 6e677468 2e792929 293b200a v_length.y))); . │ │ │ │ + 0x00d6e4d0 20202020 636f6c6f 72203d20 76656334 color = vec4 │ │ │ │ + 0x00d6e4e0 286d6978 28636f6c 6f722e72 67622c20 (mix(color.rgb, │ │ │ │ + 0x00d6e4f0 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ + 0x00d6e500 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ + 0x00d6e510 20636f6c 6f722e61 293b200a 20202020 color.a); . │ │ │ │ + 0x00d6e520 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ + 0x00d6e530 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00d6e540 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6e550 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6e560 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6e570 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6e580 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6e590 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6e5a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6e5b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6e5c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6e5d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6e5e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6e5f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6e600 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6e610 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6e620 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6e630 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6e640 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6e650 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6e660 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6e670 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6e680 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6e690 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d6e6a0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d6e6b0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00d6e6c0 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00d6e6d0 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00d6e6e0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d6e6f0 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00d6e700 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00d6e710 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00d6e720 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d6e730 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d6e740 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d6e750 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d6e760 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d6e770 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d6e780 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d6e790 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d6e7a0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6e7b0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d6e7c0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d6e7d0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d6e7e0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d6e7f0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d6e800 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d6e810 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d6e820 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d6e830 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d6e840 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d6e850 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d6e860 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d6e870 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d6e880 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d6e890 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d6e8a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6e8b0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d6e8c0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d6e8d0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d6e8e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d6e8f0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d6e900 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d6e910 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d6e920 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d6e930 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d6e940 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6e950 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d6e960 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d6e970 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d6e980 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d6e990 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d6e9a0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d6e9b0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d6e9c0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d6e9d0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d6e9e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6e9f0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d6ea00 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d6ea10 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6ea20 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d6ea30 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d6ea40 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d6ea50 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d6ea60 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d6ea70 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d6ea80 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d6ea90 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d6eaa0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d6eab0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d6eac0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d6ead0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d6eae0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d6eaf0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d6eb00 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d6eb10 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d6eb20 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d6eb30 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d6eb40 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d6eb50 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d6eb60 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d6eb70 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d6eb80 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d6eb90 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d6eba0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d6ebb0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d6ebc0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d6ebd0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d6ebe0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d6ebf0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d6ec00 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d6ec10 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d6ec20 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d6ec30 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d6ec40 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d6ec50 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d6ec60 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d6ec70 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d6ec80 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d6ec90 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d6eca0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d6ecb0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d6ecc0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d6ecd0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d6ece0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d6ecf0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d6ed00 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d6ed10 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d6ed20 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d6ed30 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d6ed40 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d6ed50 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d6ed60 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d6ed70 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d6ed80 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d6ed90 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d6eda0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d6edb0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d6edc0 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00d6edd0 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00d6ede0 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00d6edf0 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00d6ee00 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00d6ee10 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00d6ee20 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00d6ee30 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00d6ee40 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ + 0x00d6ee50 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ + 0x00d6ee60 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00d6ee70 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ + 0x00d6ee80 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ + 0x00d6ee90 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d6eea0 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ + 0x00d6eeb0 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ + 0x00d6eec0 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ + 0x00d6eed0 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ + 0x00d6eee0 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ + 0x00d6eef0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d6ef00 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ + 0x00d6ef10 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ + 0x00d6ef20 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ + 0x00d6ef30 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ + 0x00d6ef40 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ + 0x00d6ef50 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ + 0x00d6ef60 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ + 0x00d6ef70 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ + 0x00d6ef80 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d6ef90 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ + 0x00d6efa0 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ + 0x00d6efb0 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ + 0x00d6efc0 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ + 0x00d6efd0 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ + 0x00d6efe0 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ + 0x00d6eff0 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ + 0x00d6f000 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ + 0x00d6f010 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ + 0x00d6f020 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ + 0x00d6f030 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6f040 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6f050 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6f060 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6f070 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6f080 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6f090 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6f0a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6f0b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6f0c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6f0d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6f0e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6f0f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6f100 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6f110 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6f120 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6f130 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6f140 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6f150 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6f160 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6f170 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6f180 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6f190 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d6f1a0 72643b20 0a20206f 75742076 65633420 rd; . out vec4 │ │ │ │ + 0x00d6f1b0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d6f1c0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d6f1d0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d6f1e0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d6f1f0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d6f200 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d6f210 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d6f220 666f726d 20766563 3420755f 74726166 form vec4 u_traf │ │ │ │ + 0x00d6f230 66696350 6172616d 733b200a 2020756e ficParams; . un │ │ │ │ + 0x00d6f240 69666f72 6d207665 63342075 5f6f7574 iform vec4 u_out │ │ │ │ + 0x00d6f250 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00d6f260 69666f72 6d207665 63342075 5f6c6967 iform vec4 u_lig │ │ │ │ + 0x00d6f270 68744172 726f7743 6f6c6f72 3b200a20 htArrowColor; . │ │ │ │ + 0x00d6f280 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d6f290 6461726b 4172726f 77436f6c 6f723b20 darkArrowColor; │ │ │ │ + 0x00d6f2a0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d6f2b0 20755f6f 75746c69 6e653b20 0a202075 u_outline; . u │ │ │ │ + 0x00d6f2c0 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00d6f2d0 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00d6f2e0 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d6f2f0 6f6c6f72 5465783b 200a2020 636f6e73 olorTex; . cons │ │ │ │ + 0x00d6f300 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d6f310 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d6f320 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ + 0x00d6f330 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d6f340 3420636f 6c6f7220 3d207465 78747572 4 color = textur │ │ │ │ + 0x00d6f350 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d6f360 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00d6f370 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00d6f380 203d2076 65633428 636f6c6f 722e7267 = vec4(color.rg │ │ │ │ + 0x00d6f390 622c2075 5f6f7061 63697479 293b200a b, u_opacity); . │ │ │ │ + 0x00d6f3a0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d6f3b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6f3c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6f3d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6f3e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6f3f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6f400 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6f410 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6f420 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6f430 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6f440 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6f450 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6f460 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6f470 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6f480 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6f490 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6f4a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6f4b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6f4c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6f4d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6f4e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6f4f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6f500 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6f510 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00d6f520 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00d6f530 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00d6f540 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d6f550 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d6f560 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d6f570 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d6f580 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d6f590 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d6f5a0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d6f5b0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d6f5c0 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00d6f5d0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d6f5e0 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00d6f5f0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d6f600 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00d6f610 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00d6f620 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00d6f630 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d6f640 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d6f650 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00d6f660 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d6f670 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d6f680 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d6f690 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d6f6a0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d6f6b0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d6f6c0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d6f6d0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d6f6e0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d6f6f0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d6f700 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d6f710 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6f720 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d6f730 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d6f740 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d6f750 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d6f760 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d6f770 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d6f780 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d6f790 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d6f7a0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d6f7b0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d6f7c0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d6f7d0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d6f7e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6f7f0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d6f800 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d6f810 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6f820 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d6f830 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d6f840 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d6f850 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d6f860 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d6f870 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d6f880 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d6f890 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d6f8a0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d6f8b0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d6f8c0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d6f8d0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d6f8e0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d6f8f0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d6f900 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d6f910 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d6f920 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d6f930 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d6f940 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d6f950 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d6f960 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d6f970 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d6f980 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d6f990 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d6f9a0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d6f9b0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d6f9c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6f9d0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d6f9e0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d6f9f0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d6fa00 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d6fa10 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d6fa20 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d6fa30 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d6fa40 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d6fa50 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d6fa60 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d6fa70 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d6fa80 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d6fa90 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d6faa0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d6fab0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d6fac0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d6fad0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d6fae0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d6faf0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d6fb00 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d6fb10 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d6fb20 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d6fb30 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d6fb40 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d6fb50 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d6fb60 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d6fb70 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d6fb80 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d6fb90 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d6fba0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d6fbb0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d6fbc0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d6fbd0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d6fbe0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d6fbf0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d6fc00 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d6fc10 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00d6fc20 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d6fc30 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d6fc40 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ + 0x00d6fc50 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ + 0x00d6fc60 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ + 0x00d6fc70 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ + 0x00d6fc80 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ + 0x00d6fc90 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ + 0x00d6fca0 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00d6fcb0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d6fcc0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d6fcd0 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ + 0x00d6fce0 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ + 0x00d6fcf0 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00d6fd00 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ + 0x00d6fd10 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ + 0x00d6fd20 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d6fd30 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00d6fd40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6fd50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6fd60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6fd70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6fd80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6fd90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6fda0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6fdb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6fdc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6fdd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6fde0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6fdf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6fe00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6fe10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6fe20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6fe30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6fe40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6fe50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6fe60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6fe70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6fe80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6fe90 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d6fea0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d6feb0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d6fec0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d6fed0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d6fee0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d6fef0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d6ff00 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d6ff10 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d6ff20 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d6ff30 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d6ff40 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d6ff50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6ff60 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d6ff70 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d6ff80 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d6ff90 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d6ffa0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d6ffb0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d6ffc0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d6ffd0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d6ffe0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d6fff0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d70000 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d70010 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d70020 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d70030 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d70040 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d70050 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d70060 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d70070 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d70080 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d70090 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d700a0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d700b0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d700c0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d700d0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d700e0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d700f0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d70100 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d70110 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d70120 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d70130 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d70140 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d70150 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d70160 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d70170 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d70180 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d70190 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d701a0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d701b0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d701c0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d701d0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d701e0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d701f0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d70200 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d70210 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d70220 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d70230 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d70240 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d70250 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d70260 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d70270 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d70280 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d70290 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d702a0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d702b0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d702c0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d702d0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d702e0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d702f0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d70300 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d70310 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d70320 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d70330 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d70340 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d70350 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d70360 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d70370 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d70380 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d70390 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d703a0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d703b0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d703c0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d703d0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d703e0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d703f0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d70400 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d70410 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d70420 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d70430 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d70440 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d70450 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00d70460 20302c20 31293b20 0a202023 69666465 0, 1); . #ifde │ │ │ │ + 0x00d70470 66205655 4c4b414e 200a2020 2020676c f VULKAN . gl │ │ │ │ + 0x00d70480 5f506f73 6974696f 6e2e7920 3d202d67 _Position.y = -g │ │ │ │ + 0x00d70490 6c5f506f 73697469 6f6e2e79 3b200a20 l_Position.y; . │ │ │ │ + 0x00d704a0 20202067 6c5f506f 73697469 6f6e2e7a gl_Position.z │ │ │ │ + 0x00d704b0 203d2028 676c5f50 6f736974 696f6e2e = (gl_Position. │ │ │ │ + 0x00d704c0 7a20202b 20676c5f 506f7369 74696f6e z + gl_Position │ │ │ │ + 0x00d704d0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00d704e0 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00d704f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d70500 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d70510 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d70520 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d70530 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d70540 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d70550 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d70560 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d70570 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d70580 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d70590 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d705a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d705b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d705c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d705d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d705e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d705f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d70600 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d70610 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d70620 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d70630 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d70640 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d70650 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d70660 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d70670 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d70680 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d70690 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ + 0x00d706a0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d706b0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d706c0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d706d0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d706e0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d706f0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d70700 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ + 0x00d70710 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ + 0x00d70720 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ + 0x00d70730 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ + 0x00d70740 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ + 0x00d70750 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ + 0x00d70760 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d70770 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d70780 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ + 0x00d70790 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d707a0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d707b0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d707c0 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ + 0x00d707d0 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ + 0x00d707e0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d707f0 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ + 0x00d70800 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ + 0x00d70810 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ + 0x00d70820 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d70830 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ + 0x00d70840 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ + 0x00d70850 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d70860 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ + 0x00d70870 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ + 0x00d70880 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ + 0x00d70890 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d708a0 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ + 0x00d708b0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d708c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d708d0 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ + 0x00d708e0 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ + 0x00d708f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d70900 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ + 0x00d70910 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ + 0x00d70920 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ + 0x00d70930 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d70940 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ + 0x00d70950 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ + 0x00d70960 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ + 0x00d70970 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ + 0x00d70980 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d70990 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d709a0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d709b0 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ + 0x00d709c0 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ + 0x00d709d0 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ + 0x00d709e0 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ + 0x00d709f0 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ + 0x00d70a00 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ + 0x00d70a10 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d70a20 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ + 0x00d70a30 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ + 0x00d70a40 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ + 0x00d70a50 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ + 0x00d70a60 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ + 0x00d70a70 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ + 0x00d70a80 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ + 0x00d70a90 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ + 0x00d70aa0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d70ab0 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ + 0x00d70ac0 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ + 0x00d70ad0 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ + 0x00d70ae0 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ + 0x00d70af0 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ + 0x00d70b00 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ + 0x00d70b10 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ + 0x00d70b20 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ + 0x00d70b30 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ + 0x00d70b40 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ + 0x00d70b50 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ + 0x00d70b60 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d70b70 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ + 0x00d70b80 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ + 0x00d70b90 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ + 0x00d70ba0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d70bb0 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ + 0x00d70bc0 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ + 0x00d70bd0 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ + 0x00d70be0 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ + 0x00d70bf0 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ + 0x00d70c00 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ + 0x00d70c10 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ + 0x00d70c20 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ + 0x00d70c30 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ + 0x00d70c40 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ + 0x00d70c50 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ + 0x00d70c60 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ + 0x00d70c70 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ + 0x00d70c80 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d70c90 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ + 0x00d70ca0 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ + 0x00d70cb0 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ + 0x00d70cc0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d70cd0 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ + 0x00d70ce0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d70cf0 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ + 0x00d70d00 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ + 0x00d70d10 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00d70d20 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d70d30 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00d70d40 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00d70d50 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00d70d60 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ + 0x00d70d70 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ + 0x00d70d80 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00d70d90 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00d70da0 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ + 0x00d70db0 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ + 0x00d70dc0 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ + 0x00d70dd0 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ + 0x00d70de0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d70df0 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ + 0x00d70e00 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d70e10 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ + 0x00d70e20 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d70e30 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d70e40 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d70e50 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ + 0x00d70e60 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ + 0x00d70e70 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ + 0x00d70e80 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d70e90 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00d70ea0 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ + 0x00d70eb0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00d70ec0 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ + 0x00d70ed0 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ + 0x00d70ee0 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ + 0x00d70ef0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d70f00 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ + 0x00d70f10 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ + 0x00d70f20 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d70f30 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d70f40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d70f50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d70f60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d70f70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d70f80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d70f90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d70fa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d70fb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d70fc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d70fd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d70fe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d70ff0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d71000 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d71010 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d71020 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d71030 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d71040 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d71050 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d71060 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d71070 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d71080 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d71090 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00d710a0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d710b0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d710c0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d710d0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d710e0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d710f0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d71100 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d71110 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d71120 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d71130 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d71140 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d71150 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d71160 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d71170 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d71180 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d71190 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d711a0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d711b0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d711c0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d711d0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d711e0 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d711f0 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d71200 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d71210 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d71220 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d71230 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d71240 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d71250 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d71260 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d71270 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d71280 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d71290 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00d712a0 323b200a 2020666c 6f617420 616c7068 2; . float alph │ │ │ │ + 0x00d712b0 6146726f 6d506174 7465726e 28666c6f aFromPattern(flo │ │ │ │ + 0x00d712c0 61742063 75724c65 6e2c2066 6c6f6174 at curLen, float │ │ │ │ + 0x00d712d0 20646173 684c656e 2c20666c 6f617420 dashLen, float │ │ │ │ + 0x00d712e0 6761704c 656e2920 0a20207b 200a2020 gapLen) . { . │ │ │ │ + 0x00d712f0 2020666c 6f617420 6c656e20 3d206461 float len = da │ │ │ │ + 0x00d71300 73684c65 6e202b20 6761704c 656e3b20 shLen + gapLen; │ │ │ │ + 0x00d71310 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00d71320 74203d20 66726163 74286375 724c656e t = fract(curLen │ │ │ │ + 0x00d71330 202f206c 656e2920 2a206c65 6e3b200a / len) * len; . │ │ │ │ + 0x00d71340 20202020 72657475 726e2073 74657028 return step( │ │ │ │ + 0x00d71350 6f666673 65742c20 64617368 4c656e29 offset, dashLen) │ │ │ │ + 0x00d71360 3b200a20 207d200a 2020636f 6e737420 ; . } . const │ │ │ │ + 0x00d71370 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d71380 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d71390 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d713a0 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ + 0x00d713b0 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ + 0x00d713c0 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ + 0x00d713d0 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ + 0x00d713e0 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ + 0x00d713f0 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ + 0x00d71400 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ + 0x00d71410 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ + 0x00d71420 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ + 0x00d71430 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ + 0x00d71440 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ + 0x00d71450 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ + 0x00d71460 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ + 0x00d71470 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ + 0x00d71480 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ + 0x00d71490 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00d714a0 76656334 20636f6c 6f72203d 206d6169 vec4 color = mai │ │ │ │ + 0x00d714b0 6e436f6c 6f72202b 20765f63 6f6c6f72 nColor + v_color │ │ │ │ + 0x00d714c0 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ + 0x00d714d0 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ + 0x00d714e0 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ + 0x00d714f0 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ + 0x00d71500 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ + 0x00d71510 2929202a 200a2020 20202020 20202020 )) * . │ │ │ │ + 0x00d71520 20202020 2020616c 70686146 726f6d50 alphaFromP │ │ │ │ + 0x00d71530 61747465 726e2876 5f6c656e 6774682e attern(v_length. │ │ │ │ + 0x00d71540 782c2075 5f706174 7465726e 2e782c20 x, u_pattern.x, │ │ │ │ + 0x00d71550 755f7061 74746572 6e2e7929 3b200a20 u_pattern.y); . │ │ │ │ + 0x00d71560 20202063 6f6c6f72 203d2076 65633428 color = vec4( │ │ │ │ + 0x00d71570 6d697828 636f6c6f 722e7267 622c2075 mix(color.rgb, u │ │ │ │ + 0x00d71580 5f6d6173 6b436f6c 6f722e72 67622c20 _maskColor.rgb, │ │ │ │ + 0x00d71590 755f6d61 736b436f 6c6f722e 61292c20 u_maskColor.a), │ │ │ │ + 0x00d715a0 636f6c6f 722e6129 3b200a20 20202076 color.a); . v │ │ │ │ + 0x00d715b0 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ + 0x00d715c0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d715d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d715e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d715f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d71600 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d71610 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d71620 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d71630 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d71640 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d71650 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d71660 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d71670 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d71680 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d71690 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d716a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d716b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d716c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d716d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d716e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d716f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d71700 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d71710 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d71720 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d71730 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d71740 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d71750 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d71760 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d71770 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d71780 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d71790 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d717a0 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00d717b0 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00d717c0 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d717d0 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00d717e0 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00d717f0 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00d71800 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00d71810 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d71820 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00d71830 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00d71840 6d207665 63322075 5f706f73 6974696f m vec2 u_positio │ │ │ │ + 0x00d71850 6e3b200a 2020756e 69666f72 6d20666c n; . uniform fl │ │ │ │ + 0x00d71860 6f617420 755f6973 4f75746c 696e6550 oat u_isOutlineP │ │ │ │ + 0x00d71870 6173733b 200a2020 756e6966 6f726d20 ass; . uniform │ │ │ │ + 0x00d71880 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d71890 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d718a0 7420755f 6c656e67 74683b20 0a202075 t u_length; . u │ │ │ │ + 0x00d718b0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d718c0 20755f6d 61736b54 65783b20 0a202063 u_maskTex; . c │ │ │ │ + 0x00d718d0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d718e0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d718f0 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ + 0x00d71900 61696e28 29200a20 207b200a 20202369 ain() . { . #i │ │ │ │ + 0x00d71910 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d71920 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ + 0x00d71930 676c7970 68436f6c 6f72203d 20765f63 glyphColor = v_c │ │ │ │ + 0x00d71940 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00d71950 20202020 4c4f575f 50207665 63342067 LOW_P vec4 g │ │ │ │ + 0x00d71960 6c797068 436f6c6f 72203d20 74657874 lyphColor = text │ │ │ │ + 0x00d71970 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d71980 765f636f 6c6f7254 6578436f 6f726429 v_colorTexCoord) │ │ │ │ + 0x00d71990 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d719a0 20666c6f 61742064 69737420 3d207465 float dist = te │ │ │ │ + 0x00d719b0 78747572 6528755f 6d61736b 5465782c xture(u_maskTex, │ │ │ │ + 0x00d719c0 20765f6d 61736b54 6578436f 6f726429 v_maskTexCoord) │ │ │ │ + 0x00d719d0 2e723b20 0a202020 20666c6f 61742061 .r; . float a │ │ │ │ + 0x00d719e0 6c706861 203d2073 6d6f6f74 68737465 lpha = smoothste │ │ │ │ + 0x00d719f0 7028755f 636f6e74 72617374 47616d6d p(u_contrastGamm │ │ │ │ + 0x00d71a00 612e7820 2d20755f 636f6e74 72617374 a.x - u_contrast │ │ │ │ + 0x00d71a10 47616d6d 612e792c 20755f63 6f6e7472 Gamma.y, u_contr │ │ │ │ + 0x00d71a20 61737447 616d6d61 2e78202b 20755f63 astGamma.x + u_c │ │ │ │ + 0x00d71a30 6f6e7472 61737447 616d6d61 2e792c20 ontrastGamma.y, │ │ │ │ + 0x00d71a40 64697374 29202a20 755f6f70 61636974 dist) * u_opacit │ │ │ │ + 0x00d71a50 793b200a 20202020 676c7970 68436f6c y; . glyphCol │ │ │ │ + 0x00d71a60 6f722e61 202a3d20 616c7068 613b200a or.a *= alpha; . │ │ │ │ + 0x00d71a70 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ + 0x00d71a80 3d20676c 79706843 6f6c6f72 3b200a20 = glyphColor; . │ │ │ │ + 0x00d71a90 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d71aa0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d71ab0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d71ac0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d71ad0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d71ae0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d71af0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d71b00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d71b10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d71b20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d71b30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d71b40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d71b50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d71b60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d71b70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d71b80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d71b90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d71ba0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d71bb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d71bc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d71bd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d71be0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d71bf0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d71c00 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d71c10 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ + 0x00d71c20 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ + 0x00d71c30 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d71c40 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ + 0x00d71c50 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ + 0x00d71c60 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00d71c70 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d71c80 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d71c90 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d71ca0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d71cb0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d71cc0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d71cd0 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ + 0x00d71ce0 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ + 0x00d71cf0 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ + 0x00d71d00 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ + 0x00d71d10 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ + 0x00d71d20 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ + 0x00d71d30 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ + 0x00d71d40 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ + 0x00d71d50 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d71d60 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ + 0x00d71d70 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00d71d80 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ + 0x00d71d90 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ + 0x00d71da0 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ + 0x00d71db0 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ + 0x00d71dc0 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ + 0x00d71dd0 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ + 0x00d71de0 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ + 0x00d71df0 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ + 0x00d71e00 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d71e10 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00d71e20 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d71e30 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d71e40 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d71e50 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d71e60 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d71e70 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d71e80 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d71e90 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d71ea0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d71eb0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d71ec0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d71ed0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d71ee0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d71ef0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d71f00 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d71f10 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d71f20 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d71f30 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d71f40 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d71f50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d71f60 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d71f70 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d71f80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d71f90 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d71fa0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d71fb0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d71fc0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d71fd0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d71fe0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d71ff0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d72000 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d72010 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d72020 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d72030 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d72040 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d72050 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d72060 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d72070 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d72080 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d72090 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d720a0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d720b0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d720c0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d720d0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d720e0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d720f0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d72100 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d72110 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d72120 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d72130 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d72140 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d72150 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d72160 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d72170 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d72180 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d72190 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d721a0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d721b0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d721c0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d721d0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d721e0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d721f0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d72200 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d72210 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d72220 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d72230 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d72240 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d72250 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d72260 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d72270 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d72280 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d72290 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d722a0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d722b0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d722c0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d722d0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d722e0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d722f0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d72300 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d72310 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d72320 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d72330 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d72340 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d72350 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d72360 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d72370 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d72380 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d72390 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d723a0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d723b0 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00d723c0 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00d723d0 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00d723e0 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d723f0 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00d72400 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ + 0x00d72410 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00d72420 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ + 0x00d72430 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ + 0x00d72440 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ + 0x00d72450 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ + 0x00d72460 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ + 0x00d72470 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ + 0x00d72480 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ + 0x00d72490 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ + 0x00d724a0 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ + 0x00d724b0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d724c0 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ + 0x00d724d0 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ + 0x00d724e0 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ + 0x00d724f0 0a202020 20202020 20202020 20202020 . │ │ │ │ + 0x00d72500 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d72510 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d72520 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ + 0x00d72530 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ + 0x00d72540 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ + 0x00d72550 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ + 0x00d72560 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ + 0x00d72570 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ + 0x00d72580 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ + 0x00d72590 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ + 0x00d725a0 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ + 0x00d725b0 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ + 0x00d725c0 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ + 0x00d725d0 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ + 0x00d725e0 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ + 0x00d725f0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d72600 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d72610 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ + 0x00d72620 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ + 0x00d72630 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ + 0x00d72640 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ + 0x00d72650 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00d72660 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d72670 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ + 0x00d72680 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00d72690 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d726a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d726b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d726c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d726d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d726e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d726f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d72700 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d72710 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d72720 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d72730 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d72740 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d72750 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d72760 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d72770 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d72780 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d72790 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d727a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d727b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d727c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d727d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d727e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d727f0 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00d72800 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00d72810 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00d72820 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d72830 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d72840 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d72850 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d72860 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d72870 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d72880 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d72890 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d728a0 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00d728b0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d728c0 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00d728d0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d728e0 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00d728f0 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00d72900 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00d72910 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d72920 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d72930 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00d72940 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d72950 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d72960 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d72970 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d72980 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d72990 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d729a0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d729b0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d729c0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d729d0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d729e0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d729f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d72a00 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d72a10 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d72a20 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d72a30 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d72a40 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d72a50 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d72a60 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d72a70 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d72a80 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d72a90 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d72aa0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d72ab0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d72ac0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d72ad0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d72ae0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d72af0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d72b00 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d72b10 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d72b20 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d72b30 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d72b40 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d72b50 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d72b60 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d72b70 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d72b80 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d72b90 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d72ba0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d72bb0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d72bc0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d72bd0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d72be0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d72bf0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d72c00 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d72c10 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d72c20 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d72c30 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d72c40 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d72c50 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d72c60 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d72c70 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d72c80 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d72c90 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d72ca0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d72cb0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d72cc0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d72cd0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d72ce0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d72cf0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d72d00 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d72d10 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d72d20 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d72d30 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d72d40 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d72d50 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d72d60 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d72d70 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d72d80 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d72d90 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d72da0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d72db0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d72dc0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d72dd0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d72de0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d72df0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d72e00 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d72e10 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d72e20 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d72e30 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d72e40 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d72e50 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d72e60 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d72e70 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d72e80 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d72e90 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d72ea0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d72eb0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d72ec0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d72ed0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d72ee0 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ + 0x00d72ef0 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ + 0x00d72f00 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ + 0x00d72f10 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ + 0x00d72f20 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ + 0x00d72f30 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ + 0x00d72f40 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ + 0x00d72f50 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ + 0x00d72f60 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ + 0x00d72f70 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ + 0x00d72f80 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ + 0x00d72f90 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ + 0x00d72fa0 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ + 0x00d72fb0 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ + 0x00d72fc0 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ + 0x00d72fd0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d72fe0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d72ff0 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ + 0x00d73000 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ + 0x00d73010 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ + 0x00d73020 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ + 0x00d73030 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ + 0x00d73040 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ + 0x00d73050 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00d73060 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ + 0x00d73070 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ + 0x00d73080 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d73090 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d730a0 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ + 0x00d730b0 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ + 0x00d730c0 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00d730d0 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00d730e0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d730f0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d73100 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d73110 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d73120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d73130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d73140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d73150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d73160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d73170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d73180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d73190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d731a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d731b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d731c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d731d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d731e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d731f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d73200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d73210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d73220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d73230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d73240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d73250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d73260 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d73270 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d73280 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d73290 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d732a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d732b0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d732c0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d732d0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d732e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d732f0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d73300 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d73310 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d73320 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d73330 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d73340 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d73350 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d73360 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d73370 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d73380 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d73390 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d733a0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d733b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d733c0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d733d0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d733e0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d733f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d73400 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d73410 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00d73420 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00d73430 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00d73440 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d73450 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d73460 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d73470 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ + 0x00d73480 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ + 0x00d73490 50207665 63342066 696e616c 436f6c6f P vec4 finalColo │ │ │ │ + 0x00d734a0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00d734b0 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ + 0x00d734c0 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ + 0x00d734d0 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ + 0x00d734e0 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ + 0x00d734f0 78436f6f 72647329 3b200a20 2023656e xCoords); . #en │ │ │ │ + 0x00d73500 64696620 0a202020 20666c6f 61742073 dif . float s │ │ │ │ + 0x00d73510 6d616c6c 52616469 7573203d 20765f72 mallRadius = v_r │ │ │ │ + 0x00d73520 61646975 732e7a20 2d206161 50697865 adius.z - aaPixe │ │ │ │ + 0x00d73530 6c73436f 756e743b 200a2020 2020666c lsCount; . fl │ │ │ │ + 0x00d73540 6f617420 73746570 56616c75 65203d20 oat stepValue = │ │ │ │ + 0x00d73550 736d6f6f 74687374 65702873 6d616c6c smoothstep(small │ │ │ │ + 0x00d73560 52616469 7573202a 20736d61 6c6c5261 Radius * smallRa │ │ │ │ + 0x00d73570 64697573 2c20765f 72616469 75732e7a dius, v_radius.z │ │ │ │ + 0x00d73580 202a2076 5f726164 6975732e 7a2c200a * v_radius.z, . │ │ │ │ + 0x00d73590 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d735a0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d735b0 20765f72 61646975 732e7820 2a20765f v_radius.x * v_ │ │ │ │ + 0x00d735c0 72616469 75732e78 202b2076 5f726164 radius.x + v_rad │ │ │ │ + 0x00d735d0 6975732e 79202a20 765f7261 64697573 ius.y * v_radius │ │ │ │ + 0x00d735e0 2e79293b 200a2020 20206669 6e616c43 .y); . finalC │ │ │ │ + 0x00d735f0 6f6c6f72 2e61203d 2066696e 616c436f olor.a = finalCo │ │ │ │ + 0x00d73600 6c6f722e 61202a20 755f6f70 61636974 lor.a * u_opacit │ │ │ │ + 0x00d73610 79202a20 28312e30 202d2073 74657056 y * (1.0 - stepV │ │ │ │ + 0x00d73620 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ + 0x00d73630 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d73640 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d73650 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d73660 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d73670 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d73680 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d73690 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d736a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d736b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d736c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d736d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d736e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d736f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d73700 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d73710 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d73720 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d73730 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d73740 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d73750 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d73760 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d73770 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d73780 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d73790 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d737a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d737b0 63342076 5f726164 6975733b 200a2020 c4 v_radius; . │ │ │ │ + 0x00d737c0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d737d0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d737e0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d737f0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d73800 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d73810 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d73820 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d73830 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d73840 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d73850 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d73860 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d73870 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d73880 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d73890 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d738a0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d738b0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d738c0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d738d0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d738e0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d738f0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d73900 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d73910 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d73920 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d73930 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d73940 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d73950 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d73960 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d73970 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d73980 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d73990 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d739a0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d739b0 67506978 656c7343 6f756e74 203d2032 gPixelsCount = 2 │ │ │ │ + 0x00d739c0 2e353b20 0a202063 6f6e7374 20666c6f .5; . const flo │ │ │ │ + 0x00d739d0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d739e0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d739f0 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d73a00 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ + 0x00d73a10 616c436f 6c6f7220 3d20765f 636f6c6f alColor = v_colo │ │ │ │ + 0x00d73a20 723b200a 20202020 666c6f61 74206161 r; . float aa │ │ │ │ + 0x00d73a30 52616469 7573203d 206d6178 28765f72 Radius = max(v_r │ │ │ │ + 0x00d73a40 61646975 732e7a20 2d206b41 6e746961 adius.z - kAntia │ │ │ │ + 0x00d73a50 6c696173 696e6750 6978656c 73436f75 liasingPixelsCou │ │ │ │ + 0x00d73a60 6e742c20 302e3029 3b200a20 20202066 nt, 0.0); . f │ │ │ │ + 0x00d73a70 6c6f6174 20737465 7056616c 7565203d loat stepValue = │ │ │ │ + 0x00d73a80 20736d6f 6f746873 74657028 61615261 smoothstep(aaRa │ │ │ │ + 0x00d73a90 64697573 202a2061 61526164 6975732c dius * aaRadius, │ │ │ │ + 0x00d73aa0 20765f72 61646975 732e7a20 2a20765f v_radius.z * v_ │ │ │ │ + 0x00d73ab0 72616469 75732e7a 2c200a20 20202020 radius.z, . │ │ │ │ + 0x00d73ac0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d73ad0 20202020 20202020 20202020 646f7428 dot( │ │ │ │ + 0x00d73ae0 765f7261 64697573 2e78792c 20765f72 v_radius.xy, v_r │ │ │ │ + 0x00d73af0 61646975 732e7879 29293b20 0a202020 adius.xy)); . │ │ │ │ + 0x00d73b00 2066696e 616c436f 6c6f722e 61203d20 finalColor.a = │ │ │ │ + 0x00d73b10 66696e61 6c436f6c 6f722e61 202a2075 finalColor.a * u │ │ │ │ + 0x00d73b20 5f6f7061 63697479 202a2028 312e3020 _opacity * (1.0 │ │ │ │ + 0x00d73b30 2d207374 65705661 6c756529 3b200a20 - stepValue); . │ │ │ │ + 0x00d73b40 20202069 66202866 696e616c 436f6c6f if (finalColo │ │ │ │ + 0x00d73b50 722e6120 3c20302e 3031207c 7c20755f r.a < 0.01 || u_ │ │ │ │ + 0x00d73b60 726f7574 65506172 616d732e 79203e20 routeParams.y > │ │ │ │ + 0x00d73b70 765f7261 64697573 2e772920 0a202020 v_radius.w) . │ │ │ │ + 0x00d73b80 20202064 69736361 72643b20 0a202020 discard; . │ │ │ │ + 0x00d73b90 2066696e 616c436f 6c6f7220 3d207665 finalColor = ve │ │ │ │ + 0x00d73ba0 6334286d 69782866 696e616c 436f6c6f c4(mix(finalColo │ │ │ │ + 0x00d73bb0 722e7267 622c2075 5f6d6173 6b436f6c r.rgb, u_maskCol │ │ │ │ + 0x00d73bc0 6f722e72 67622c20 755f6d61 736b436f or.rgb, u_maskCo │ │ │ │ + 0x00d73bd0 6c6f722e 61292c20 66696e61 6c436f6c lor.a), finalCol │ │ │ │ + 0x00d73be0 6f722e61 293b200a 20202020 765f4672 or.a); . v_Fr │ │ │ │ + 0x00d73bf0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d73c00 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d73c10 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d73c20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d73c30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d73c40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d73c50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d73c60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d73c70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d73c80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d73c90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d73ca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d73cb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d73cc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d73cd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d73ce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d73cf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d73d00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d73d10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d73d20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d73d30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d73d40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d73d50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d73d60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d73d70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d73d80 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d73d90 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00d73da0 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00d73db0 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00d73dc0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d73dd0 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00d73de0 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00d73df0 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00d73e00 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d73e10 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d73e20 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d73e30 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d73e40 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d73e50 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d73e60 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d73e70 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d73e80 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d73e90 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d73ea0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d73eb0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d73ec0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d73ed0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d73ee0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d73ef0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d73f00 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d73f10 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d73f20 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d73f30 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d73f40 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d73f50 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d73f60 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d73f70 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d73f80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d73f90 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d73fa0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d73fb0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d73fc0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d73fd0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d73fe0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d73ff0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d74000 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d74010 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d74020 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d74030 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d74040 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d74050 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d74060 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d74070 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d74080 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d74090 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d740a0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d740b0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d740c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d740d0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d740e0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d740f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d74100 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d74110 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d74120 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d74130 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d74140 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d74150 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d74160 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d74170 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d74180 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d74190 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d741a0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d741b0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d741c0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d741d0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d741e0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d741f0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d74200 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d74210 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d74220 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d74230 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d74240 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d74250 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d74260 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d74270 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d74280 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d74290 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d742a0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d742b0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d742c0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d742d0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d742e0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d742f0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d74300 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d74310 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d74320 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d74330 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d74340 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d74350 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d74360 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d74370 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d74380 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d74390 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d743a0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d743b0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d743c0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d743d0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d743e0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d743f0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d74400 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d74410 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d74420 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d74430 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d74440 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d74450 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d74460 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d74470 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d74480 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d74490 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d744a0 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00d744b0 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00d744c0 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00d744d0 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00d744e0 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00d744f0 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00d74500 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00d74510 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00d74520 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ + 0x00d74530 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ + 0x00d74540 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ + 0x00d74550 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ + 0x00d74560 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ + 0x00d74570 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ + 0x00d74580 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ + 0x00d74590 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00d745a0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d745b0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00d745c0 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ + 0x00d745d0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d745e0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d745f0 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ + 0x00d74600 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ + 0x00d74610 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ + 0x00d74620 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ + 0x00d74630 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ + 0x00d74640 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ + 0x00d74650 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ + 0x00d74660 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ + 0x00d74670 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ + 0x00d74680 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ + 0x00d74690 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ + 0x00d746a0 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ + 0x00d746b0 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ + 0x00d746c0 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ + 0x00d746d0 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ + 0x00d746e0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d746f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d74700 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d74710 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d74720 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d74730 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d74740 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d74750 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d74760 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d74770 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d74780 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d74790 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d747a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d747b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d747c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d747d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d747e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d747f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d74800 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d74810 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d74820 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d74830 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d74840 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00d74850 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00d74860 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d74870 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d74880 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00d74890 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d748a0 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00d748b0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d748c0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d748d0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d748e0 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00d748f0 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00d74900 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d74910 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d74920 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d74930 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ + 0x00d74940 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ + 0x00d74950 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ + 0x00d74960 6f722e61 202a2073 6d6f6f74 68737465 or.a * smoothste │ │ │ │ + 0x00d74970 7028302e 372c2031 2e302c20 765f696e p(0.7, 1.0, v_in │ │ │ │ + 0x00d74980 74656e73 69747929 293b200a 20207d20 tensity)); . } │ │ │ │ + 0x00d74990 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d749a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d749b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d749c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d749d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d749e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d749f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d74a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d74a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d74a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d74a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d74a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d74a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d74a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d74a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d74a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d74a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d74aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d74ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d74ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d74ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d74ae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d74af0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d74b00 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d74b10 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d74b20 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d74b30 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d74b40 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ + 0x00d74b50 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ + 0x00d74b60 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ + 0x00d74b70 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d74b80 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00d74b90 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ + 0x00d74ba0 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ + 0x00d74bb0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d74bc0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d74bd0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d74be0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d74bf0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d74c00 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d74c10 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d74c20 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d74c30 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d74c40 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d74c50 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d74c60 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d74c70 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d74c80 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d74c90 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d74ca0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d74cb0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d74cc0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d74cd0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d74ce0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d74cf0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d74d00 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d74d10 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d74d20 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d74d30 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d74d40 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d74d50 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d74d60 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d74d70 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d74d80 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d74d90 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d74da0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d74db0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d74dc0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d74dd0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d74de0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d74df0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d74e00 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d74e10 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d74e20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d74e30 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d74e40 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d74e50 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d74e60 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d74e70 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d74e80 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d74e90 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d74ea0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d74eb0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d74ec0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d74ed0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d74ee0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d74ef0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d74f00 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d74f10 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d74f20 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d74f30 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d74f40 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d74f50 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d74f60 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d74f70 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d74f80 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d74f90 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d74fa0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d74fb0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d74fc0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d74fd0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d74fe0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d74ff0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d75000 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d75010 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d75020 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d75030 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d75040 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d75050 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d75060 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d75070 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d75080 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d75090 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d750a0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d750b0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d750c0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d750d0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d750e0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d750f0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d75100 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d75110 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d75120 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d75130 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d75140 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d75150 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d75160 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d75170 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d75180 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d75190 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d751a0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d751b0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d751c0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d751d0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d751e0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d751f0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d75200 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d75210 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d75220 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d75230 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d75240 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d75250 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d75260 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d75270 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d75280 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00d75290 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d752a0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d752b0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d752c0 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00d752d0 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ + 0x00d752e0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d752f0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d75300 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ + 0x00d75310 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ + 0x00d75320 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00d75330 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d75340 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00d75350 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d75360 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00d75370 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00d75380 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00d75390 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d753a0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d753b0 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ + 0x00d753c0 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ + 0x00d753d0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d753e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d753f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d75400 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d75410 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d75420 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d75430 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d75440 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d75450 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d75460 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d75470 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d75480 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d75490 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d754a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d754b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d754c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d754d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d754e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d754f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d75500 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d75510 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d75520 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d75530 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d75540 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ + 0x00d75550 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ + 0x00d75560 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ + 0x00d75570 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ + 0x00d75580 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ + 0x00d75590 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ + 0x00d755a0 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ + 0x00d755b0 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ + 0x00d755c0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d755d0 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ + 0x00d755e0 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ + 0x00d755f0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d75600 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d75610 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d75620 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d75630 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d75640 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d75650 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d75660 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d75670 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d75680 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d75690 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d756a0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d756b0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d756c0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d756d0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d756e0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d756f0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d75700 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d75710 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d75720 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d75730 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d75740 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d75750 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d75760 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d75770 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d75780 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d75790 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d757a0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d757b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d757c0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d757d0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d757e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d757f0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d75800 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d75810 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d75820 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d75830 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d75840 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d75850 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d75860 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d75870 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d75880 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d75890 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d758a0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d758b0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d758c0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d758d0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d758e0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d758f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d75900 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d75910 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d75920 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d75930 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d75940 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d75950 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d75960 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d75970 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d75980 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d75990 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d759a0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d759b0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d759c0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d759d0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d759e0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d759f0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d75a00 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d75a10 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d75a20 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d75a30 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d75a40 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d75a50 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d75a60 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d75a70 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d75a80 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d75a90 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d75aa0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d75ab0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d75ac0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d75ad0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d75ae0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d75af0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d75b00 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d75b10 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d75b20 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d75b30 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d75b40 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d75b50 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d75b60 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d75b70 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d75b80 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d75b90 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ + 0x00d75ba0 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ + 0x00d75bb0 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ + 0x00d75bc0 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ + 0x00d75bd0 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ + 0x00d75be0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d75bf0 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ + 0x00d75c00 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d75c10 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00d75c20 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00d75c30 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d75c40 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00d75c50 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ + 0x00d75c60 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ + 0x00d75c70 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ + 0x00d75c80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d75c90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d75ca0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d75cb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d75cc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d75cd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d75ce0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d75cf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d75d00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d75d10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d75d20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d75d30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d75d40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d75d50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d75d60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d75d70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d75d80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d75d90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d75da0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d75db0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d75dc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d75dd0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d75de0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d75df0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d75e00 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d75e10 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d75e20 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00d75e30 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ + 0x00d75e40 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ + 0x00d75e50 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ + 0x00d75e60 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ + 0x00d75e70 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d75e80 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d75e90 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d75ea0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d75eb0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d75ec0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d75ed0 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ + 0x00d75ee0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d75ef0 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ + 0x00d75f00 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d75f10 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ + 0x00d75f20 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d75f30 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ + 0x00d75f40 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d75f50 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ + 0x00d75f60 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00d75f70 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ + 0x00d75f80 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ + 0x00d75f90 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ + 0x00d75fa0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d75fb0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d75fc0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d75fd0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d75fe0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d75ff0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d76000 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d76010 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d76020 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d76030 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d76040 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d76050 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d76060 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d76070 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d76080 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d76090 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d760a0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d760b0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d760c0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d760d0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d760e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d760f0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d76100 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d76110 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d76120 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d76130 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d76140 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d76150 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d76160 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d76170 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d76180 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d76190 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d761a0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d761b0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d761c0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d761d0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d761e0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d761f0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d76200 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d76210 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d76220 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d76230 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d76240 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d76250 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d76260 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d76270 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d76280 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d76290 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d762a0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d762b0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d762c0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d762d0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d762e0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d762f0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d76300 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d76310 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d76320 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d76330 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d76340 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d76350 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d76360 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d76370 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d76380 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d76390 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d763a0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d763b0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d763c0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d763d0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d763e0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d763f0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d76400 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d76410 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d76420 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d76430 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d76440 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d76450 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d76460 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d76470 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d76480 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d76490 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d764a0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d764b0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d764c0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d764d0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d764e0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d764f0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d76500 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d76510 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d76520 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d76530 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d76540 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ + 0x00d76550 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ + 0x00d76560 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00d76570 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00d76580 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00d76590 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00d765a0 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00d765b0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d765c0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00d765d0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00d765e0 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00d765f0 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ + 0x00d76600 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ + 0x00d76610 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ + 0x00d76620 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ + 0x00d76630 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ + 0x00d76640 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d76650 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ + 0x00d76660 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d76670 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d76680 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00d76690 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d766a0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00d766b0 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ + 0x00d766c0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d766d0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d766e0 20202020 20202020 20202020 20755f6d u_m │ │ │ │ + 0x00d766f0 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ + 0x00d76700 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ + 0x00d76710 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ + 0x00d76720 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ + 0x00d76730 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ + 0x00d76740 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ + 0x00d76750 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ + 0x00d76760 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ + 0x00d76770 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ + 0x00d76780 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d76790 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ + 0x00d767a0 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ + 0x00d767b0 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ + 0x00d767c0 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ + 0x00d767d0 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ + 0x00d767e0 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ + 0x00d767f0 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ + 0x00d76800 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ + 0x00d76810 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ + 0x00d76820 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ + 0x00d76830 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d76840 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ + 0x00d76850 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ + 0x00d76860 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ + 0x00d76870 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ + 0x00d76880 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ + 0x00d76890 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ + 0x00d768a0 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00d768b0 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ + 0x00d768c0 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d768d0 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ + 0x00d768e0 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ + 0x00d768f0 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ + 0x00d76900 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ + 0x00d76910 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ + 0x00d76920 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d76930 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ + 0x00d76940 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d76950 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d76960 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d76970 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d76980 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d76990 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d769a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d769b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d769c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d769d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d769e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d769f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d76a00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d76a10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d76a20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d76a30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d76a40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d76a50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d76a60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d76a70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d76a80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d76a90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d76aa0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d76ab0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d76ac0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d76ad0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d76ae0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d76af0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d76b00 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d76b10 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d76b20 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00d76b30 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d76b40 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00d76b50 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00d76b60 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00d76b70 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d76b80 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d76b90 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d76ba0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d76bb0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00d76bc0 75743b20 0a202075 6e69666f 726d2073 ut; . uniform s │ │ │ │ + 0x00d76bd0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00d76be0 5465783b 200a2020 636f6e73 7420666c Tex; . const fl │ │ │ │ + 0x00d76bf0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d76c00 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d76c10 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d76c20 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ + 0x00d76c30 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ + 0x00d76c40 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00d76c50 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ + 0x00d76c60 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ + 0x00d76c70 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ + 0x00d76c80 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00d76c90 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ + 0x00d76ca0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d76cb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d76cc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d76cd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d76ce0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d76cf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d76d00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d76d10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d76d20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d76d30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d76d40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d76d50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d76d60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d76d70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d76d80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d76d90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d76da0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d76db0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d76dc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d76dd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d76de0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d76df0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d76e00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d76e10 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ + 0x00d76e20 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ + 0x00d76e30 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ + 0x00d76e40 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ + 0x00d76e50 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ + 0x00d76e60 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d76e70 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00d76e80 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ + 0x00d76e90 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ + 0x00d76ea0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d76eb0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00d76ec0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d76ed0 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ + 0x00d76ee0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d76ef0 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ + 0x00d76f00 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ + 0x00d76f10 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ + 0x00d76f20 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ + 0x00d76f30 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ + 0x00d76f40 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ + 0x00d76f50 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ + 0x00d76f60 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ + 0x00d76f70 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ + 0x00d76f80 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ + 0x00d76f90 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ + 0x00d76fa0 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ + 0x00d76fb0 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ + 0x00d76fc0 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ + 0x00d76fd0 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ + 0x00d76fe0 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ + 0x00d76ff0 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ + 0x00d77000 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ + 0x00d77010 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d77020 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ + 0x00d77030 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ + 0x00d77040 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ + 0x00d77050 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ + 0x00d77060 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ + 0x00d77070 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d77080 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ + 0x00d77090 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ + 0x00d770a0 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ + 0x00d770b0 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ + 0x00d770c0 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ + 0x00d770d0 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ + 0x00d770e0 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ + 0x00d770f0 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ + 0x00d77100 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ + 0x00d77110 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ + 0x00d77120 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ + 0x00d77130 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ + 0x00d77140 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ + 0x00d77150 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ + 0x00d77160 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ + 0x00d77170 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ + 0x00d77180 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ + 0x00d77190 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d771a0 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ + 0x00d771b0 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ + 0x00d771c0 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ + 0x00d771d0 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ + 0x00d771e0 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ + 0x00d771f0 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ + 0x00d77200 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ + 0x00d77210 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ + 0x00d77220 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ + 0x00d77230 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ + 0x00d77240 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ + 0x00d77250 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ + 0x00d77260 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ + 0x00d77270 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ + 0x00d77280 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ + 0x00d77290 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ + 0x00d772a0 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ + 0x00d772b0 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ + 0x00d772c0 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ + 0x00d772d0 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ + 0x00d772e0 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ + 0x00d772f0 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ + 0x00d77300 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00d77310 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ + 0x00d77320 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ + 0x00d77330 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ + 0x00d77340 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ + 0x00d77350 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00d77360 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00d77370 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00d77380 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00d77390 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00d773a0 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ + 0x00d773b0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00d773c0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d773d0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00d773e0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00d773f0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00d77400 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00d77410 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00d77420 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00d77430 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ + 0x00d77440 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00d77450 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ + 0x00d77460 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ + 0x00d77470 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ + 0x00d77480 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ + 0x00d77490 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ + 0x00d774a0 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ + 0x00d774b0 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ + 0x00d774c0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00d774d0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00d774e0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d774f0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00d77500 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ + 0x00d77510 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00d77520 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00d77530 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00d77540 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00d77550 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00d77560 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ + 0x00d77570 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00d77580 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d77590 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00d775a0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00d775b0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00d775c0 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00d775d0 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00d775e0 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00d775f0 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ + 0x00d77600 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ + 0x00d77610 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ + 0x00d77620 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ + 0x00d77630 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ + 0x00d77640 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ + 0x00d77650 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ + 0x00d77660 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ + 0x00d77670 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ + 0x00d77680 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ + 0x00d77690 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00d776a0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d776b0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00d776c0 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ + 0x00d776d0 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ + 0x00d776e0 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ + 0x00d776f0 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ + 0x00d77700 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ + 0x00d77710 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ + 0x00d77720 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ + 0x00d77730 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ + 0x00d77740 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ + 0x00d77750 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ + 0x00d77760 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ + 0x00d77770 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ + 0x00d77780 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ + 0x00d77790 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ + 0x00d777a0 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ + 0x00d777b0 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ + 0x00d777c0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d777d0 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ + 0x00d777e0 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ + 0x00d777f0 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ + 0x00d77800 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ + 0x00d77810 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ + 0x00d77820 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ + 0x00d77830 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ + 0x00d77840 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00d77850 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ + 0x00d77860 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d77870 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ + 0x00d77880 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ + 0x00d77890 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ + 0x00d778a0 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ + 0x00d778b0 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ + 0x00d778c0 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ + 0x00d778d0 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ + 0x00d778e0 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ + 0x00d778f0 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ + 0x00d77900 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ + 0x00d77910 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ + 0x00d77920 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ + 0x00d77930 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ + 0x00d77940 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ + 0x00d77950 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ + 0x00d77960 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ + 0x00d77970 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ + 0x00d77980 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00d77990 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ + 0x00d779a0 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ + 0x00d779b0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00d779c0 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ + 0x00d779d0 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ + 0x00d779e0 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ + 0x00d779f0 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ + 0x00d77a00 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ + 0x00d77a10 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ + 0x00d77a20 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ + 0x00d77a30 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ + 0x00d77a40 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ + 0x00d77a50 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ + 0x00d77a60 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ + 0x00d77a70 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ + 0x00d77a80 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ + 0x00d77a90 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ + 0x00d77aa0 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ + 0x00d77ab0 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ + 0x00d77ac0 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ + 0x00d77ad0 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ + 0x00d77ae0 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ + 0x00d77af0 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ + 0x00d77b00 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ + 0x00d77b10 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ + 0x00d77b20 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ + 0x00d77b30 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ + 0x00d77b40 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d77b50 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d77b60 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d77b70 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d77b80 65633420 77656967 68747320 3d207665 ec4 weights = ve │ │ │ │ + 0x00d77b90 63342830 2e302c20 302e302c 20302e30 c4(0.0, 0.0, 0.0 │ │ │ │ + 0x00d77ba0 2c20302e 30293b20 0a202020 20766563 , 0.0); . vec │ │ │ │ + 0x00d77bb0 32206520 3d207465 78747572 6528755f 2 e = texture(u_ │ │ │ │ + 0x00d77bc0 636f6c6f 72546578 2c20765f 636f6f72 colorTex, v_coor │ │ │ │ + 0x00d77bd0 64732e78 79292e72 673b200a 20202020 ds.xy).rg; . │ │ │ │ + 0x00d77be0 69662028 652e6720 3e20302e 3029202f if (e.g > 0.0) / │ │ │ │ + 0x00d77bf0 2f204564 67652061 74206e6f 72746820 / Edge at north │ │ │ │ + 0x00d77c00 0a202020 207b200a 20202020 20207665 . { . ve │ │ │ │ + 0x00d77c10 63322064 3b200a20 20202020 20766563 c2 d; . vec │ │ │ │ + 0x00d77c20 3320636f 6f726473 3b200a20 20202020 3 coords; . │ │ │ │ + 0x00d77c30 20636f6f 7264732e 78203d20 534d4141 coords.x = SMAA │ │ │ │ + 0x00d77c40 53656172 6368584c 65667428 765f6f66 SearchXLeft(v_of │ │ │ │ + 0x00d77c50 66736574 302e7879 2c20765f 6f666673 fset0.xy, v_offs │ │ │ │ + 0x00d77c60 6574322e 78293b20 0a202020 20202063 et2.x); . c │ │ │ │ + 0x00d77c70 6f6f7264 732e7920 3d20765f 6f666673 oords.y = v_offs │ │ │ │ + 0x00d77c80 6574312e 793b200a 20202020 2020642e et1.y; . d. │ │ │ │ + 0x00d77c90 78203d20 636f6f72 64732e78 3b200a20 x = coords.x; . │ │ │ │ + 0x00d77ca0 20202020 20666c6f 61742065 31203d20 float e1 = │ │ │ │ + 0x00d77cb0 534d4141 53616d70 6c654c65 76656c5a SMAASampleLevelZ │ │ │ │ + 0x00d77cc0 65726f28 755f636f 6c6f7254 65782c20 ero(u_colorTex, │ │ │ │ + 0x00d77cd0 636f6f72 64732e78 79292e72 3b200a20 coords.xy).r; . │ │ │ │ + 0x00d77ce0 20202020 20636f6f 7264732e 7a203d20 coords.z = │ │ │ │ + 0x00d77cf0 534d4141 53656172 63685852 69676874 SMAASearchXRight │ │ │ │ + 0x00d77d00 28765f6f 66667365 74302e7a 772c2076 (v_offset0.zw, v │ │ │ │ + 0x00d77d10 5f6f6666 73657432 2e79293b 200a2020 _offset2.y); . │ │ │ │ + 0x00d77d20 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ + 0x00d77d30 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ + 0x00d77d40 7a7a203d 20755f66 72616d65 62756666 zz = u_framebuff │ │ │ │ + 0x00d77d50 65724d65 74726963 732e7a7a 3b200a20 erMetrics.zz; . │ │ │ │ + 0x00d77d60 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ + 0x00d77d70 41526f75 6e64287a 7a202a20 64202d20 ARound(zz * d - │ │ │ │ + 0x00d77d80 765f636f 6f726473 2e7a7a29 293b200a v_coords.zz)); . │ │ │ │ + 0x00d77d90 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ + 0x00d77da0 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ + 0x00d77db0 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ + 0x00d77dc0 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00d77dd0 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ + 0x00d77de0 5465782c 20636f6f 7264732e 7a792c20 Tex, coords.zy, │ │ │ │ + 0x00d77df0 534d4141 4f666673 65742831 2c203029 SMAAOffset(1, 0) │ │ │ │ + 0x00d77e00 292e723b 200a2020 20202020 77656967 ).r; . weig │ │ │ │ + 0x00d77e10 6874732e 7267203d 20534d41 41417265 hts.rg = SMAAAre │ │ │ │ + 0x00d77e20 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ + 0x00d77e30 293b200a 20202020 7d200a20 20202069 ); . } . i │ │ │ │ + 0x00d77e40 66202865 2e72203e 20302e30 29202f2f f (e.r > 0.0) // │ │ │ │ + 0x00d77e50 20456467 65206174 20776573 74200a20 Edge at west . │ │ │ │ + 0x00d77e60 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00d77e70 20643b20 0a202020 20202076 65633320 d; . vec3 │ │ │ │ + 0x00d77e80 636f6f72 64733b20 0a202020 20202063 coords; . c │ │ │ │ + 0x00d77e90 6f6f7264 732e7920 3d20534d 41415365 oords.y = SMAASe │ │ │ │ + 0x00d77ea0 61726368 59557028 765f6f66 66736574 archYUp(v_offset │ │ │ │ + 0x00d77eb0 312e7879 2c20765f 6f666673 6574322e 1.xy, v_offset2. │ │ │ │ + 0x00d77ec0 7a293b20 0a202020 20202063 6f6f7264 z); . coord │ │ │ │ + 0x00d77ed0 732e7820 3d20765f 6f666673 6574302e s.x = v_offset0. │ │ │ │ + 0x00d77ee0 783b200a 20202020 2020642e 78203d20 x; . d.x = │ │ │ │ + 0x00d77ef0 636f6f72 64732e79 3b200a20 20202020 coords.y; . │ │ │ │ + 0x00d77f00 20666c6f 61742065 31203d20 534d4141 float e1 = SMAA │ │ │ │ + 0x00d77f10 53616d70 6c654c65 76656c5a 65726f28 SampleLevelZero( │ │ │ │ + 0x00d77f20 755f636f 6c6f7254 65782c20 636f6f72 u_colorTex, coor │ │ │ │ + 0x00d77f30 64732e78 79292e67 3b200a20 20202020 ds.xy).g; . │ │ │ │ + 0x00d77f40 20636f6f 7264732e 7a203d20 534d4141 coords.z = SMAA │ │ │ │ + 0x00d77f50 53656172 63685944 6f776e28 765f6f66 SearchYDown(v_of │ │ │ │ + 0x00d77f60 66736574 312e7a77 2c20765f 6f666673 fset1.zw, v_offs │ │ │ │ + 0x00d77f70 6574322e 77293b20 0a202020 20202064 et2.w); . d │ │ │ │ + 0x00d77f80 2e79203d 20636f6f 7264732e 7a3b200a .y = coords.z; . │ │ │ │ + 0x00d77f90 20202020 20207665 63322077 77203d20 vec2 ww = │ │ │ │ + 0x00d77fa0 755f6672 616d6562 75666665 724d6574 u_framebufferMet │ │ │ │ + 0x00d77fb0 72696373 2e77773b 200a2020 20202020 rics.ww; . │ │ │ │ + 0x00d77fc0 64203d20 61627328 534d4141 526f756e d = abs(SMAARoun │ │ │ │ + 0x00d77fd0 64287777 202a2064 202d2076 5f636f6f d(ww * d - v_coo │ │ │ │ + 0x00d77fe0 7264732e 77772929 3b200a20 20202020 rds.ww)); . │ │ │ │ + 0x00d77ff0 20766563 32207371 72745f64 203d2073 vec2 sqrt_d = s │ │ │ │ + 0x00d78000 71727428 64293b20 0a202020 20202066 qrt(d); . f │ │ │ │ + 0x00d78010 6c6f6174 20653220 3d20534d 41415361 loat e2 = SMAASa │ │ │ │ + 0x00d78020 6d706c65 4c657665 6c5a6572 6f4f6666 mpleLevelZeroOff │ │ │ │ + 0x00d78030 73657428 755f636f 6c6f7254 65782c20 set(u_colorTex, │ │ │ │ + 0x00d78040 636f6f72 64732e78 7a2c2053 4d41414f coords.xz, SMAAO │ │ │ │ + 0x00d78050 66667365 7428302c 20312929 2e673b20 ffset(0, 1)).g; │ │ │ │ + 0x00d78060 0a202020 20202077 65696768 74732e62 . weights.b │ │ │ │ + 0x00d78070 61203d20 534d4141 41726561 28737172 a = SMAAArea(sqr │ │ │ │ + 0x00d78080 745f642c 2065312c 20653229 3b200a20 t_d, e1, e2); . │ │ │ │ + 0x00d78090 2020207d 200a2020 2020765f 46726167 } . v_Frag │ │ │ │ + 0x00d780a0 436f6c6f 72203d20 77656967 6874733b Color = weights; │ │ │ │ + 0x00d780b0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d780c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d780d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d780e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d780f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d78100 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d78110 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d78120 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d78130 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d78140 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d78150 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d78160 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d78170 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d78180 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d78190 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d781a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d781b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d781c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d781d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d781e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d781f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d78200 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d78210 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d78220 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d78230 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ + 0x00d78240 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ + 0x00d78250 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d78260 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ + 0x00d78270 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ + 0x00d78280 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d78290 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d782a0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d782b0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d782c0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d782d0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d782e0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d782f0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d78300 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d78310 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d78320 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d78330 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d78340 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d78350 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d78360 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d78370 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d78380 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d78390 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d783a0 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d783b0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d783c0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d783d0 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ + 0x00d783e0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d783f0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d78400 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d78410 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ + 0x00d78420 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ + 0x00d78430 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ + 0x00d78440 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ + 0x00d78450 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d78460 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d78470 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d78480 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d78490 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d784a0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d784b0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d784c0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d784d0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d784e0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d784f0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d78500 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d78510 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d78520 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d78530 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d78540 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d78550 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d78560 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d78570 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d78580 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d78590 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d785a0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d785b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d785c0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d785d0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d785e0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d785f0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d78600 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d78610 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d78620 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d78630 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d78640 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d78650 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d78660 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d78670 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d78680 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d78690 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d786a0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d786b0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d786c0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d786d0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d786e0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d786f0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d78700 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d78710 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d78720 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d78730 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d78740 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d78750 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d78760 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d78770 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d78780 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d78790 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d787a0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d787b0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d787c0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d787d0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d787e0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d787f0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d78800 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d78810 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d78820 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d78830 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d78840 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d78850 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d78860 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d78870 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d78880 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d78890 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d788a0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d788b0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d788c0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d788d0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d788e0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d788f0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d78900 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d78910 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d78920 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d78930 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d78940 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d78950 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d78960 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d78970 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d78980 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d78990 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d789a0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d789b0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d789c0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d789d0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d789e0 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ + 0x00d789f0 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ + 0x00d78a00 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ + 0x00d78a10 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ + 0x00d78a20 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ + 0x00d78a30 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ + 0x00d78a40 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ + 0x00d78a50 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ + 0x00d78a60 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ + 0x00d78a70 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ + 0x00d78a80 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ + 0x00d78a90 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ + 0x00d78aa0 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ + 0x00d78ab0 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ + 0x00d78ac0 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ + 0x00d78ad0 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00d78ae0 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ + 0x00d78af0 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ + 0x00d78b00 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00d78b10 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00d78b20 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00d78b30 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00d78b40 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d78b50 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00d78b60 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00d78b70 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00d78b80 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ + 0x00d78b90 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ + 0x00d78ba0 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ + 0x00d78bb0 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ + 0x00d78bc0 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ + 0x00d78bd0 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ + 0x00d78be0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00d78bf0 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ + 0x00d78c00 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ + 0x00d78c10 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ + 0x00d78c20 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ + 0x00d78c30 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ + 0x00d78c40 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d78c50 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00d78c60 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00d78c70 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d78c80 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d78c90 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d78ca0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d78cb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d78cc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d78cd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d78ce0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d78cf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d78d00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d78d10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d78d20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d78d30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d78d40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d78d50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d78d60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d78d70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d78d80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d78d90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d78da0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d78db0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d78dc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d78dd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d78de0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d78df0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d78e00 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d78e10 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ + 0x00d78e20 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d78e30 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ + 0x00d78e40 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ + 0x00d78e50 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ + 0x00d78e60 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ + 0x00d78e70 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ + 0x00d78e80 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ + 0x00d78e90 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ + 0x00d78ea0 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ + 0x00d78eb0 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ + 0x00d78ec0 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ + 0x00d78ed0 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ + 0x00d78ee0 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d78ef0 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ + 0x00d78f00 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ + 0x00d78f10 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ + 0x00d78f20 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d78f30 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ + 0x00d78f40 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d78f50 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ + 0x00d78f60 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ + 0x00d78f70 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ + 0x00d78f80 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d78f90 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d78fa0 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00d78fb0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d78fc0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d78fd0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d78fe0 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00d78ff0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d79000 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d79010 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00d79020 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00d79030 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00d79040 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d79050 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00d79060 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d79070 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d79080 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d79090 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00d790a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d790b0 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00d790c0 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00d790d0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d790e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d790f0 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00d79100 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00d79110 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d79120 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00d79130 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00d79140 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d79150 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00d79160 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00d79170 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00d79180 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00d79190 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00d791a0 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d791b0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d791c0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d791d0 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00d791e0 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00d791f0 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00d79200 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00d79210 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00d79220 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d79230 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00d79240 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00d79250 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d79260 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00d79270 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00d79280 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d79290 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00d792a0 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00d792b0 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00d792c0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d792d0 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00d792e0 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00d792f0 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00d79300 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00d79310 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00d79320 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00d79330 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00d79340 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00d79350 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00d79360 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00d79370 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00d79380 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d79390 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d793a0 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00d793b0 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00d793c0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d793d0 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00d793e0 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00d793f0 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00d79400 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00d79410 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00d79420 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00d79430 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00d79440 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00d79450 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00d79460 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00d79470 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d79480 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00d79490 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00d794a0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d794b0 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00d794c0 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00d794d0 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00d794e0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d794f0 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00d79500 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d79510 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ + 0x00d79520 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ + 0x00d79530 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ + 0x00d79540 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ + 0x00d79550 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ + 0x00d79560 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ + 0x00d79570 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d79580 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ + 0x00d79590 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ + 0x00d795a0 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ + 0x00d795b0 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d795c0 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ + 0x00d795d0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d795e0 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ + 0x00d795f0 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ + 0x00d79600 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ + 0x00d79610 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d79620 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ + 0x00d79630 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d79640 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ + 0x00d79650 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ + 0x00d79660 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ + 0x00d79670 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ + 0x00d79680 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ + 0x00d79690 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ + 0x00d796a0 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00d796b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d796c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d796d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d796e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d796f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d79700 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d79710 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d79720 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d79730 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d79740 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d79750 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d79760 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d79770 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d79780 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d79790 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d797a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d797b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d797c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d797d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d797e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d797f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d79800 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d79810 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d79820 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d79830 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d79840 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d79850 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d79860 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d79870 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d79880 23656e64 6966200a 20206f75 74207665 #endif . out ve │ │ │ │ + 0x00d79890 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00d798a0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d798b0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d798c0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d798d0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00d798e0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00d798f0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00d79900 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00d79910 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00d79920 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d79930 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d79940 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00d79950 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00d79960 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00d79970 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00d79980 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d79990 696e6550 6173733b 200a2020 636f6e73 inePass; . cons │ │ │ │ + 0x00d799a0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d799b0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d799c0 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ + 0x00d799d0 2829200a 20207b20 0a202023 69666465 () . { . #ifde │ │ │ │ + 0x00d799e0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d799f0 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00d79a00 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ + 0x00d79a10 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ + 0x00d79a20 50207665 63342063 6f6c6f72 203d2074 P vec4 color = t │ │ │ │ + 0x00d79a30 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d79a40 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00d79a50 7264293b 200a2020 23656e64 6966200a rd); . #endif . │ │ │ │ + 0x00d79a60 20202020 636f6c6f 722e6120 2a3d2075 color.a *= u │ │ │ │ + 0x00d79a70 5f6f7061 63697479 3b200a20 20202076 _opacity; . v │ │ │ │ + 0x00d79a80 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ + 0x00d79a90 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d79aa0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d79ab0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d79ac0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d79ad0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d79ae0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d79af0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d79b00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d79b10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d79b20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d79b30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d79b40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d79b50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d79b60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d79b70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d79b80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d79b90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d79ba0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d79bb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d79bc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d79bd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d79be0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d79bf0 63342076 5f636f6c 6f723b20 0a20206f c4 v_color; . o │ │ │ │ + 0x00d79c00 75742076 65633420 765f4672 6167436f ut vec4 v_FragCo │ │ │ │ + 0x00d79c10 6c6f723b 200a2020 636f6e73 7420666c lor; . const fl │ │ │ │ + 0x00d79c20 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d79c30 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d79c40 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d79c50 20207b20 0a202020 20765f46 72616743 { . v_FragC │ │ │ │ + 0x00d79c60 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ + 0x00d79c70 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d79c80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d79c90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d79ca0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d79cb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d79cc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d79cd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d79ce0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d79cf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d79d00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d79d10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d79d20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d79d30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d79d40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d79d50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d79d60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d79d70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d79d80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d79d90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d79da0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d79db0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d79dc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d79dd0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d79de0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d79df0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d79e00 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00d79e10 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00d79e20 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00d79e30 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d79e40 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00d79e50 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00d79e60 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00d79e70 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00d79e80 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00d79e90 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d79ea0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00d79eb0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d79ec0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d79ed0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d79ee0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d79ef0 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d79f00 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d79f10 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d79f20 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d79f30 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d79f40 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d79f50 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d79f60 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d79f70 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d79f80 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d79f90 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d79fa0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d79fb0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d79fc0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d79fd0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d79fe0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d79ff0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d7a000 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d7a010 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d7a020 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d7a030 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d7a040 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d7a050 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d7a060 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d7a070 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d7a080 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d7a090 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d7a0a0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d7a0b0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d7a0c0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d7a0d0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d7a0e0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d7a0f0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d7a100 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d7a110 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d7a120 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d7a130 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d7a140 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d7a150 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d7a160 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d7a170 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d7a180 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d7a190 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d7a1a0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d7a1b0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d7a1c0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d7a1d0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d7a1e0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d7a1f0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d7a200 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d7a210 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d7a220 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d7a230 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d7a240 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d7a250 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d7a260 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d7a270 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d7a280 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d7a290 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d7a2a0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d7a2b0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d7a2c0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d7a2d0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d7a2e0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d7a2f0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d7a300 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d7a310 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d7a320 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d7a330 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d7a340 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d7a350 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d7a360 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d7a370 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d7a380 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d7a390 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d7a3a0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d7a3b0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d7a3c0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d7a3d0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d7a3e0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d7a3f0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d7a400 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d7a410 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d7a420 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d7a430 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d7a440 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d7a450 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d7a460 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d7a470 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d7a480 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d7a490 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d7a4a0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d7a4b0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d7a4c0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d7a4d0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d7a4e0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d7a4f0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d7a500 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d7a510 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d7a520 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d7a530 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d7a540 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d7a550 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d7a560 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d7a570 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d7a580 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d7a590 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d7a5a0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d7a5b0 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00d7a5c0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d7a5d0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d7a5e0 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00d7a5f0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d7a600 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00d7a610 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d7a620 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00d7a630 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d7a640 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d7a650 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00d7a660 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00d7a670 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00d7a680 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00d7a690 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00d7a6a0 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00d7a6b0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00d7a6c0 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ + 0x00d7a6d0 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ + 0x00d7a6e0 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ + 0x00d7a6f0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d7a700 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00d7a710 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00d7a720 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d7a730 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d7a740 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d7a750 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d7a760 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d7a770 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d7a780 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d7a790 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d7a7a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d7a7b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d7a7c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d7a7d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d7a7e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d7a7f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d7a800 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d7a810 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d7a820 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d7a830 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d7a840 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d7a850 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d7a860 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d7a870 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d7a880 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d7a890 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d7a8a0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d7a8b0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d7a8c0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d7a8d0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d7a8e0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d7a8f0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d7a900 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00d7a910 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00d7a920 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00d7a930 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d7a940 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d7a950 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00d7a960 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d7a970 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d7a980 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00d7a990 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d7a9a0 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00d7a9b0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d7a9c0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d7a9d0 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ + 0x00d7a9e0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d7a9f0 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00d7aa00 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00d7aa10 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00d7aa20 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ + 0x00d7aa30 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ + 0x00d7aa40 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ + 0x00d7aa50 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d7aa60 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d7aa70 200a0000 00000000 00000000 00000000 ............... │ │ │ │ 0x00d7aa80 4e326470 31304770 7550726f 6772616d N2dp10GpuProgram │ │ │ │ 0x00d7aa90 45000000 00000000 00000000 00000000 E............... │ │ │ │ 0x00d7aaa0 4e336770 75313950 726f6772 616d5061 N3gpu19ProgramPa │ │ │ │ 0x00d7aab0 72616d73 53657474 65724500 00000000 ramsSetterE..... │ │ │ │ 0x00d7aac0 4e336770 75323147 4c50726f 6772616d N3gpu21GLProgram │ │ │ │ 0x00d7aad0 50617261 6d735365 74746572 45000000 ParamsSetterE... │ │ │ │ 0x00d7aae0 4e336770 75313150 726f6772 616d506f N3gpu11ProgramPo │ │ │ ├── readelf --wide --decompress --hex-dump=.gnu_debuglink {} │ │ │ │ @@ -1,7 +1,7 @@ │ │ │ │ │ │ │ │ Hex dump of section '.gnu_debuglink': │ │ │ │ - 0x00000000 31396664 61366135 62336336 39383564 19fda6a5b3c6985d │ │ │ │ - 0x00000010 64326665 37313537 31373636 36343961 d2fe71571766649a │ │ │ │ - 0x00000020 66353034 61362e64 65627567 00000000 f504a6.debug.... │ │ │ │ - 0x00000030 bef74541 ..EA │ │ │ │ + 0x00000000 65333865 39653737 32653934 30373932 e38e9e772e940792 │ │ │ │ + 0x00000010 36376563 63633233 34323766 65343664 67eccc23427fe46d │ │ │ │ + 0x00000020 30643837 39332e64 65627567 00000000 0d8793.debug.... │ │ │ │ + 0x00000030 f76b7ea8 .k~.