--- /srv/rebuilderd/tmp/rebuilderdJId6Uj/inputs/organicmaps_2026.02.18-5+ds-1+b1_amd64.deb +++ /srv/rebuilderd/tmp/rebuilderdJId6Uj/out/organicmaps_2026.02.18-5+ds-1+b1_amd64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-03-02 21:33:57.000000 debian-binary │ -rw-r--r-- 0 0 0 1244 2026-03-02 21:33:57.000000 control.tar.xz │ --rw-r--r-- 0 0 0 5154524 2026-03-02 21:33:57.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 5153496 2026-03-02 21:33: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: 220db7d3377f1bcb725dc95a1553096216b1ba68 │ │ │ │ + GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 845982247bf035886faa70fc4fce28d7e6394ffb │ │ │ │ │ │ │ │ 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 {} │ │ │ │ @@ -1,8 +1,8 @@ │ │ │ │ -h/lib64/ld-linux-x86-64.so.2 │ │ │ │ +/lib64/ld-linux-x86-64.so.2 │ │ │ │ _ITM_deregisterTMCloneTable │ │ │ │ __gmon_start__ │ │ │ │ _ITM_registerTMCloneTable │ │ │ │ _ZN6google14FlagRegistererC1IiEEPKcS3_S3_PT_S5_ │ │ │ │ _ZN6google16SetVersionStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE │ │ │ │ _ZSt19piecewise_construct │ │ │ │ _ZN6google21ParseCommandLineFlagsEPiPPPcb │ │ │ │ @@ -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.03.02-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.03.03-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 │ │ │ │ @@ -26376,68 +26376,82 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ + in 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 │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + #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 vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ 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); │ │ │ │ + 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 │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #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; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26445,28 +26459,59 @@ │ │ │ │ #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 vec3 v_radius; │ │ │ │ + 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 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 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 = 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; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out 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 │ │ │ │ @@ -26488,31 +26533,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - vec4 normal = vec4(a_position + a_normal, 1.0) * u_modelView; │ │ │ │ - normal.xyw = (normal * u_projection).xyw; │ │ │ │ - normal.z = normal.z * u_zScale; │ │ │ │ - pos.xyw = (pos * u_projection).xyw; │ │ │ │ - pos.z = a_position.z * u_zScale; │ │ │ │ - vec4 normDir = normal - pos; │ │ │ │ - if (dot(normDir, normDir) != 0.0) │ │ │ │ - v_intensity = max(0.0, -dot(kNormalizedLightDir, normalize(normDir))); │ │ │ │ - else │ │ │ │ - v_intensity = 0.0; │ │ │ │ - gl_Position = u_pivotTransform * pos; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + v_coords = vec4(a_tcoord, a_tcoord * u_framebufferMetrics.zw); │ │ │ │ + v_offset0 = u_framebufferMetrics.xyxy * vec4(-0.25, -0.125, 1.25, -0.125) + a_tcoord.xyxy; │ │ │ │ + v_offset1 = u_framebufferMetrics.xyxy * vec4(-0.125, -0.25, -0.125, 1.25) + a_tcoord.xyxy; │ │ │ │ + v_offset2 = u_framebufferMetrics.xxyy * kMaxSearchSteps + vec4(v_offset0.xz, v_offset1.yw); │ │ │ │ + gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26520,32 +26553,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; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -26567,27 +26594,18 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.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 │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26595,25 +26613,31 @@ │ │ │ │ #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_colorTexCoords; │ │ │ │ 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); │ │ │ │ + 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() │ │ │ │ - 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 = 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; │ │ │ │ @@ -26621,21 +26645,19 @@ │ │ │ │ #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_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 │ │ │ │ @@ -26657,21 +26679,17 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 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 │ │ │ │ + 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; │ │ │ │ @@ -26679,23 +26697,43 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in float v_intensity; │ │ │ │ + #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_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; │ │ │ │ + const float aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = vec4(u_color.rgb, u_color.a * smoothstep(0.7, 1.0, v_intensity)); │ │ │ │ + #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); │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26703,23 +26741,50 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in float v_intensity; │ │ │ │ + in vec3 v_length; │ │ │ │ + in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + 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() │ │ │ │ - v_FragColor = vec4(u_color.rgb, u_color.a * v_intensity); │ │ │ │ + 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; │ │ │ │ @@ -26727,57 +26792,41 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - out float v_intensity; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ - 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; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ #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; │ │ │ │ + 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() │ │ │ │ - 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; │ │ │ │ + #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; │ │ │ │ @@ -26814,23 +26863,41 @@ │ │ │ │ #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 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_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out vec4 v_offset0; │ │ │ │ + out vec4 v_offset1; │ │ │ │ + out vec4 v_offset2; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -26852,22 +26919,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 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; │ │ │ │ + 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; │ │ │ │ @@ -26875,43 +26939,56 @@ │ │ │ │ #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; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - 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 aaPixelsCount = 2.5; │ │ │ │ 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() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 finalColor = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + 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 │ │ │ │ - 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); │ │ │ │ - v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26920,33 +26997,24 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ out vec3 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform 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 │ │ │ │ @@ -26968,23 +27036,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 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; │ │ │ │ + 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; │ │ │ │ @@ -26992,33 +27062,42 @@ │ │ │ │ #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_radius; │ │ │ │ in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - const float kAntialiasingScalar = 0.9; │ │ │ │ + const float kAntialiasingPixelsCount = 2.5; │ │ │ │ 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); │ │ │ │ + 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 │ │ │ │ @@ -27027,62 +27106,23 @@ │ │ │ │ #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 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; │ │ │ │ - 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() │ │ │ │ - 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_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; │ │ │ │ @@ -27090,45 +27130,26 @@ │ │ │ │ #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 │ │ │ │ + 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 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) │ │ │ │ + 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; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -27138,34 +27159,17 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27187,23 +27191,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 p = vec4(a_position, 1) * u_modelView; │ │ │ │ - vec4 pos = vec4(a_normal.xy + a_colorTexCoords.zw, 0, 0) + p; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ - #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + 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; │ │ │ │ @@ -27212,33 +27209,27 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec4 a_maskTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ 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 │ │ │ │ @@ -27260,57 +27251,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal.xy + a_colorTexCoords.zw, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, 0.0, offset.xy); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ - #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #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; │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -27318,28 +27277,33 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ in vec2 a_colorTexCoord; │ │ │ │ - in vec4 a_maskTexCoord; │ │ │ │ + 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 │ │ │ │ @@ -27361,25 +27325,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_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); │ │ │ │ + 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; │ │ │ │ - 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); │ │ │ │ + #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27387,35 +27350,36 @@ │ │ │ │ #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 │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec2 u_position; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + const float kBaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27437,61 +27401,30 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(a_position, 0, 1); │ │ │ │ + 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 │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ - color *= texture(u_maskTex, v_maskTexCoords); │ │ │ │ - color.a *= u_opacity; │ │ │ │ - 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; │ │ │ │ @@ -27501,21 +27434,19 @@ │ │ │ │ #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; │ │ │ │ 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; │ │ │ │ @@ -27548,45 +27479,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 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 │ │ │ │ - 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; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27594,20 +27507,26 @@ │ │ │ │ #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; │ │ │ │ + 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_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 │ │ │ │ @@ -27629,21 +27548,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_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 │ │ │ │ + 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); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27651,38 +27567,93 @@ │ │ │ │ #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; │ │ │ │ + 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 │ │ │ │ #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ in vec2 v_colorTexCoord; │ │ │ │ + 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 float u_opacity; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + 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 │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + 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 sampler2D u_colorTex; │ │ │ │ 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; │ │ │ │ + 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; │ │ │ │ @@ -27692,31 +27663,26 @@ │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ + 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; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + 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 │ │ │ │ @@ -27738,60 +27704,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); │ │ │ │ - #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 │ │ │ │ - #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 │ │ │ │ - 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_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27799,28 +27736,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 vec2 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + 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 │ │ │ │ @@ -27842,19 +27776,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.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.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; │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27862,28 +27797,46 @@ │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ + 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_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 │ │ │ │ @@ -27905,20 +27858,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 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; │ │ │ │ + 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; │ │ │ │ @@ -27926,26 +27878,34 @@ │ │ │ │ #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; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoords; │ │ │ │ + out vec4 v_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27967,26 +27927,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 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 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal.xy + a_colorTexCoords.zw, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, 0.0, offset.xy); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + #endif │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27997,15 +27954,17 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -28035,23 +27994,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.xyz, 1) * u_modelView; │ │ │ │ - float normalLen = length(a_normal); │ │ │ │ - vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView; │ │ │ │ - vec4 norm = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - if (dot(n, n) != 0.0) │ │ │ │ - norm = normalize(n) * normalLen; │ │ │ │ - vec4 shiftedPos = norm + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + 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; │ │ │ │ @@ -28059,26 +28015,24 @@ │ │ │ │ #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_position; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec2 u_position; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + 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 │ │ │ │ @@ -28100,18 +28054,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 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); │ │ │ │ + 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 │ │ │ │ @@ -28120,50 +28075,30 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_length; │ │ │ │ - in vec4 v_color; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ 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_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 kAntialiasingThreshold = 0.92; │ │ │ │ - const float kOutlineThreshold1 = 0.81; │ │ │ │ - const float kOutlineThreshold2 = 0.71; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ 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; │ │ │ │ + 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; │ │ │ │ @@ -28247,72 +28182,28 @@ │ │ │ │ #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 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 │ │ │ │ - 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 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 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 │ │ │ │ @@ -28334,22 +28225,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 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_arrowHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + 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; │ │ │ │ @@ -28357,49 +28251,43 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_length; │ │ │ │ - in vec4 v_color; │ │ │ │ + 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 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); │ │ │ │ + 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() │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -28407,42 +28295,46 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_radius; │ │ │ │ - in vec4 v_color; │ │ │ │ + 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; │ │ │ │ - const float kAntialiasingPixelsCount = 2.5; │ │ │ │ + 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 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) │ │ │ │ + #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; │ │ │ │ - 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,102 +28343,49 @@ │ │ │ │ #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 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 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() │ │ │ │ - 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; │ │ │ │ - #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 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; │ │ │ │ @@ -28554,25 +28393,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + in vec3 a_pos; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ + out float v_intensity; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -28594,20 +28429,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(u_position + a_position + u_length * a_normal, 0, 1) * u_projection; │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_intensity = a_texCoords.x; │ │ │ │ + gl_Position = position; │ │ │ │ #ifdef VULKAN │ │ │ │ gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28615,41 +28451,28 @@ │ │ │ │ #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 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 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; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + 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 │ │ │ │ @@ -28671,59 +28494,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() │ │ │ │ - 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; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_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 vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - 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; │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_lengthY))); │ │ │ │ - v_FragColor = color; │ │ │ │ + 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; │ │ │ │ @@ -28731,37 +28520,32 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ + in 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 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; │ │ │ │ - #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 │ │ │ │ @@ -28784,27 +28568,19 @@ │ │ │ │ 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; │ │ │ │ + vec2 norm = a_normal * u_arrowHalfWidth; │ │ │ │ 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; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -28814,137 +28590,27 @@ │ │ │ │ #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 vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec4 v_coords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ - #define SMAA_MAX_SEARCH_STEPS 8.0 │ │ │ │ - const vec4 kMaxSearchSteps = vec4(-2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS, │ │ │ │ - -2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS); │ │ │ │ + in vec3 a_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; │ │ │ │ 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,19 +28632,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_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); │ │ │ │ + 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; │ │ │ │ @@ -28986,67 +28653,37 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - in vec4 v_offset0; │ │ │ │ - in vec4 v_offset1; │ │ │ │ - in vec4 v_offset2; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #define SMAA_THRESHOLD 0.05 │ │ │ │ - const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ - #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ - const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ - float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ - float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ - vec4 delta; │ │ │ │ - delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ - vec2 edges = step(kThreshold, delta.xy); │ │ │ │ - if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ - discard; │ │ │ │ - float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ - float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ - vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ - float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ - float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ - maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ - float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ - edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ - v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + const float BaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -29068,63 +28705,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_colorTexCoords = a_tcoord; │ │ │ │ - v_offset0 = u_framebufferMetrics.xyxy * vec4(-1.0, 0.0, 0.0, -1.0) + a_tcoord.xyxy; │ │ │ │ - v_offset1 = u_framebufferMetrics.xyxy * vec4( 1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ - v_offset2 = u_framebufferMetrics.xyxy * vec4(-2.0, 0.0, 0.0, -2.0) + a_tcoord.xyxy; │ │ │ │ - gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ - #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 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; │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29132,51 +28733,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + uniform MEDIUM_P sampler2DArray u_colorTex; │ │ │ │ + in vec3 v_texCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ 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_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); │ │ │ │ + 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; │ │ │ │ @@ -29187,35 +28757,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_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 finalColor = v_color; │ │ │ │ + LOW_P vec4 glyphColor = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ #endif │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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; │ │ │ │ @@ -29223,42 +28797,35 @@ │ │ │ │ #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 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_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; │ │ │ │ + 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; │ │ │ │ @@ -29266,35 +28833,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_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 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 │ │ │ │ @@ -29317,22 +28875,22 @@ │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + float normalLen = length(a_normal); │ │ │ │ + vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView; │ │ │ │ + vec4 norm = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ + if (dot(n, n) != 0.0) │ │ │ │ + norm = normalize(n) * normalLen; │ │ │ │ + vec4 shiftedPos = norm + pos; │ │ │ │ gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29340,33 +28898,24 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + 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 │ │ │ │ @@ -29388,24 +28937,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 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; │ │ │ │ + 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; │ │ │ │ @@ -29413,37 +28961,34 @@ │ │ │ │ #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 vec3 a_position; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + 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; │ │ │ │ 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 +29010,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 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; │ │ │ │ + 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, colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_radius = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29493,35 +29034,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; │ │ │ │ - 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 │ │ │ │ @@ -29543,69 +29075,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 depthShift = kBaseDepthShift * isOutline; │ │ │ │ - vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + 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); │ │ │ │ - vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ - #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #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() │ │ │ │ - #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_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29614,35 +29096,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 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 │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ 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 +29144,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 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 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, colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29695,28 +29168,36 @@ │ │ │ │ #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 │ │ │ │ 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 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 finalColor = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ finalColor.a *= u_opacity; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -29726,26 +29207,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 │ │ │ │ @@ -29767,16 +29248,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; │ │ │ │ + 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 │ │ │ │ @@ -29787,29 +29276,44 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ - in float v_intensity; │ │ │ │ + in vec4 v_offset0; │ │ │ │ + in vec4 v_offset1; │ │ │ │ + in vec4 v_offset2; │ │ │ │ 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; │ │ │ │ + #define SMAA_THRESHOLD 0.05 │ │ │ │ + const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ + #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ + const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ 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); │ │ │ │ + float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ + float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ + float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ + vec4 delta; │ │ │ │ + delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ + vec2 edges = step(kThreshold, delta.xy); │ │ │ │ + if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ + discard; │ │ │ │ + float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ + float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ + vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ + float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ + float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ + maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ + float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ + edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ + v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29817,26 +29321,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 +29362,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,54 +29382,32 @@ │ │ │ │ #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; │ │ │ │ - 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_position; │ │ │ │ + in vec3 a_position; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -29947,20 +29429,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(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 │ │ │ │ + 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 │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29973,25 +29456,33 @@ │ │ │ │ #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_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 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 │ │ │ │ @@ -30000,20 +29491,38 @@ │ │ │ │ #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 │ │ │ │ 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 kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = texture(u_colorTex, v_texCoords.xy); │ │ │ │ + #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; │ │ │ │ @@ -30021,21 +29530,64 @@ │ │ │ │ #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]; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + 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 vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + 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; │ │ │ │ + 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; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec3 a_pos; │ │ │ │ + in vec3 a_normal; │ │ │ │ + out vec3 v_normal; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30057,20 +29609,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 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])); │ │ │ │ + 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; │ │ │ │ @@ -30078,20 +29631,60 @@ │ │ │ │ #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; │ │ │ │ + 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 │ │ │ │ + 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 = texture(u_colorTex, v_texCoords); │ │ │ │ + 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; │ │ │ │ @@ -30144,30 +29737,63 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ + 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; │ │ │ │ + #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_colorTexCoord; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec3 a_length; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - out float v_halfLength; │ │ │ │ + #endif │ │ │ │ + out float v_lengthY; │ │ │ │ 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; │ │ │ │ + #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 │ │ │ │ @@ -30189,28 +29815,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() │ │ │ │ - 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; │ │ │ │ + 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)); │ │ │ │ - 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; │ │ │ │ + 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 │ │ │ │ @@ -30220,38 +29846,52 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - in vec3 v_radius; │ │ │ │ + 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 vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ 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 float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - 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; │ │ │ │ + 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 │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30259,28 +29899,21 @@ │ │ │ │ #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; │ │ │ │ + #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; │ │ │ │ - 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 │ │ │ │ @@ -30302,28 +29935,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -30331,30 +29956,73 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + 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 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 │ │ │ │ + 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 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - v_FragColor = vec4(color.rgb, u_opacity); │ │ │ │ + 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; │ │ │ │ @@ -30362,17 +30030,19 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ + in 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; │ │ │ │ @@ -30403,17 +30073,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + 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 │ │ │ │ @@ -30422,19 +30102,75 @@ │ │ │ │ #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_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + out float v_halfLength; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ + uniform float u_opacity; │ │ │ │ + const float kArrowVSize = 0.25; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + 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; │ │ │ │ + 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); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30443,23 +30179,33 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30481,23 +30227,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_lineHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - v_color = a_color; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + 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; │ │ │ │ @@ -30505,28 +30250,63 @@ │ │ │ │ #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; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - const float aaPixelsCount = 2.5; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_offsets; │ │ │ │ + out vec4 v_color; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_params; │ │ │ │ + uniform float u_lineHalfWidth; │ │ │ │ + uniform float u_maxRadius; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + 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 = 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; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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; │ │ │ │ @@ -30534,25 +30314,33 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec3 a_normal; │ │ │ │ in vec4 a_color; │ │ │ │ - out vec3 v_radius; │ │ │ │ + out vec4 v_radius; │ │ │ │ out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + 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 │ │ │ │ @@ -30574,25 +30362,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_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; │ │ │ │ + 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; │ │ │ │ - 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; │ │ │ │ @@ -30600,27 +30387,83 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_offsets; │ │ │ │ - in vec4 v_color; │ │ │ │ + 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 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); │ │ │ │ + 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 │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + in vec3 v_texCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + 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; │ │ │ │ + #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; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -30629,25 +30472,35 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_offsets; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kBaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30669,23 +30522,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.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; │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ + #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30693,35 +30550,154 @@ │ │ │ │ #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; │ │ │ │ + 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 │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ 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_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; │ │ │ │ @@ -30730,27 +30706,32 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec3 a_normalAndAnimateOrZ; │ │ │ │ - in vec4 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_texCoords; │ │ │ │ - out vec4 v_maskColor; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform 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 │ │ │ │ @@ -30772,25 +30753,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ - if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ - normal = u_interpolation * normal; │ │ │ │ - vec4 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; │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + float halfWidth = length(normal); │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (halfWidth != 0.0) │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + normal, │ │ │ │ + u_modelView, halfWidth); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ + #else │ │ │ │ + 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; │ │ │ │ @@ -30798,20 +30781,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normalAndAnimateOrZ; │ │ │ │ - in vec4 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_texCoords; │ │ │ │ - out vec4 v_maskColor; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -30841,25 +30824,42 @@ │ │ │ │ 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 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_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; │ │ │ │ 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 0x316c3d(%rip),%r8 │ │ │ │ + lea 0x31e076(%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 0x312239(%rip),%r8 │ │ │ │ + lea 0x307112(%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 0x324a31(%rip),%r8 │ │ │ │ + lea 0x32d34a(%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 0x31b289(%rip),%r8 │ │ │ │ + lea 0x317fe2(%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 0x31b221(%rip),%r8 │ │ │ │ + lea 0x317f7a(%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 0x31acd9(%rip),%r8 │ │ │ │ + lea 0x319eb2(%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 0x31ac71(%rip),%r8 │ │ │ │ + lea 0x32560a(%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 0x309049(%rip),%r8 │ │ │ │ + lea 0x30e042(%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 0x308fe1(%rip),%r8 │ │ │ │ + lea 0x30dfda(%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 0x31e745(%rip),%r8 │ │ │ │ + lea 0x32067e(%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 0x31e6e9(%rip),%r8 │ │ │ │ + lea 0x320622(%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 0x310607(%rip),%r8 │ │ │ │ + lea 0x3109a0(%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 0x31e61f(%rip),%r8 │ │ │ │ + lea 0x30ea38(%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 0x321377(%rip),%r8 │ │ │ │ + lea 0x32c390(%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 0x30bc4f(%rip),%r8 │ │ │ │ + lea 0x30a928(%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 0x329547(%rip),%r8 │ │ │ │ + lea 0x30c6e0(%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 0x311c3f(%rip),%r8 │ │ │ │ + lea 0x31b1d8(%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 0x31e417(%rip),%r8 │ │ │ │ + lea 0x320350(%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 0x307f2f(%rip),%r8 │ │ │ │ + lea 0x31c568(%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 0x32bcc7(%rip),%r8 │ │ │ │ + lea 0x327400(%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 0x30545f(%rip),%r8 │ │ │ │ + lea 0x313a58(%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 0x3298d7(%rip),%r8 │ │ │ │ + lea 0x3110f0(%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 0x3071ef(%rip),%r8 │ │ │ │ + lea 0x31f7c8(%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 0x307187(%rip),%r8 │ │ │ │ + lea 0x31e5a0(%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 0x3212df(%rip),%r8 │ │ │ │ + lea 0x3232f8(%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 0x309157(%rip),%r8 │ │ │ │ + lea 0x31b850(%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 0x30552f(%rip),%r8 │ │ │ │ + lea 0x327b68(%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 0x3080c7(%rip),%r8 │ │ │ │ + lea 0x314400(%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 0x31669f(%rip),%r8 │ │ │ │ + lea 0x314398(%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 0x320863(%rip),%r8 │ │ │ │ + lea 0x31805c(%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 0x30ad87(%rip),%r8 │ │ │ │ + lea 0x328400(%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 0x3056c5(%rip),%r8 │ │ │ │ + lea 0x318ade(%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 0x31a6fd(%rip),%r8 │ │ │ │ + lea 0x317456(%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 0x31a695(%rip),%r8 │ │ │ │ + lea 0x3173ee(%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 0x323b8d(%rip),%r8 │ │ │ │ + lea 0x311866(%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 0x304be5(%rip),%r8 │ │ │ │ + lea 0x30b75e(%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 0x322b3d(%rip),%r8 │ │ │ │ + lea 0x321296(%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 0x308915(%rip),%r8 │ │ │ │ + lea 0x321aee(%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 0x30f3cd(%rip),%r8 │ │ │ │ + lea 0x316946(%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 0x30afa5(%rip),%r8 │ │ │ │ + lea 0x3168de(%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 0x315c3d(%rip),%r8 │ │ │ │ + lea 0x311db6(%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 0x311235(%rip),%r8 │ │ │ │ + lea 0x31c66e(%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 0x323a2d(%rip),%r8 │ │ │ │ + lea 0x312786(%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 0x31a285(%rip),%r8 │ │ │ │ + lea 0x31499e(%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 0x31a21d(%rip),%r8 │ │ │ │ + lea 0x314936(%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 0x31a1b5(%rip),%r8 │ │ │ │ + lea 0x3148ce(%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 0x31a14d(%rip),%r8 │ │ │ │ + lea 0x314866(%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 0x319c05(%rip),%r8 │ │ │ │ + lea 0x32919e(%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 0x319b9d(%rip),%r8 │ │ │ │ + lea 0x30c516(%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 0x321f5b(%rip),%r8 │ │ │ │ + lea 0x325b34(%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 0x31375f(%rip),%r8 │ │ │ │ + lea 0x30e578(%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 0x30f123(%rip),%r8 │ │ │ │ + lea 0x324e9c(%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 0x328a5b(%rip),%r8 │ │ │ │ + lea 0x3239f4(%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 0x319773(%rip),%r8 │ │ │ │ + lea 0x32398c(%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 0x31e3cb(%rip),%r8 │ │ │ │ + lea 0x3087a4(%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 0x329a76(%rip),%r8 │ │ │ │ + lea 0x30516f(%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 0x314fac(%rip),%r8 │ │ │ │ + lea 0x306805(%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 0x32c737(%rip),%r8 │ │ │ │ + lea 0x308fb0(%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 $0x3f8ce,%eax │ │ │ │ + mov $0x3f8cf,%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 2e30332e 30322d30 2d303030 2026.03.02-0-000 │ │ │ │ + 0x00cda030 32303236 2e30332e 30332d30 2d303030 2026.03.03-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) │ │ │ │ @@ -52309,909 +52309,909 @@ │ │ │ │ 0x00d52520 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ 0x00d52530 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ 0x00d52540 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ 0x00d52550 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ 0x00d52560 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ 0x00d52570 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ 0x00d52580 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d52590 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d525a0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d525b0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00d525c0 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00d525d0 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00d525e0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00d525f0 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00d52600 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00d52610 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00d52620 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d52630 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d52640 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d52650 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d52660 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d52670 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d52680 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d52690 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d526a0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00d526b0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00d526c0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00d526d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d526e0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00d526f0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00d52700 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00d52710 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00d52720 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00d52730 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00d52740 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00d52750 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00d52760 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d52770 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d52780 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00d52790 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d527a0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d527b0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d527c0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00d527d0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00d527e0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00d527f0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00d52800 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00d52810 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00d52820 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d52830 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00d52840 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00d52850 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d52860 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d52870 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00d52880 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d52890 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00d528a0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00d528b0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d528c0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d528d0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00d528e0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00d528f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d52900 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00d52910 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00d52920 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00d52930 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d52940 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00d52950 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00d52960 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00d52970 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00d52980 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d52990 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d529a0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d529b0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00d529c0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00d529d0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00d529e0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00d529f0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00d52a00 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d52a10 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d52a20 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00d52a30 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00d52a40 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00d52a50 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00d52a60 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d52a70 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00d52a80 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d52a90 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00d52aa0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d52ab0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00d52ac0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00d52ad0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00d52ae0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00d52af0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00d52b00 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d52b10 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00d52b20 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00d52b30 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00d52b40 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00d52b50 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00d52b60 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d52b70 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d52b80 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00d52b90 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00d52ba0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00d52bb0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00d52bc0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00d52bd0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00d52be0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00d52bf0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00d52c00 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00d52c10 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00d52c20 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00d52c30 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00d52c40 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00d52c50 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d52c60 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00d52c70 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00d52c80 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d52c90 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 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 . } .... │ │ │ │ + 0x00d52590 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d525a0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d525b0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d525c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d525d0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d525e0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d525f0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00d52600 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d52610 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d52620 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d52630 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d52640 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d52650 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d52660 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00d52670 6f6f7264 73293b20 0a202020 2066696e oords); . fin │ │ │ │ + 0x00d52680 616c436f 6c6f722e 61202a3d 20755f6f alColor.a *= u_o │ │ │ │ + 0x00d52690 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ + 0x00d526a0 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ + 0x00d526b0 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ + 0x00d526c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d526d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d526e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d526f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d52700 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d52710 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d52720 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d52730 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d52740 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d52750 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d52760 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d52770 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d52780 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d52790 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d527a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d527b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d527c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d527d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d527e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d527f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d52800 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d52810 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d52820 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d52830 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d52840 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d52850 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d52860 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d52870 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d52880 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00d52890 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00d528a0 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00d528b0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d528c0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d528d0 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00d528e0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d528f0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d52900 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00d52910 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d52920 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00d52930 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d52940 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d52950 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ + 0x00d52960 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d52970 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00d52980 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00d52990 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00d529a0 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ + 0x00d529b0 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ + 0x00d529c0 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ + 0x00d529d0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d529e0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d529f0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d52a00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d52a10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d52a20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d52a30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d52a40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d52a50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d52a60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d52a70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d52a80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d52a90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d52aa0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d52ab0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d52ac0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d52ad0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d52ae0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d52af0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d52b00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d52b10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d52b20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d52b30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d52b40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d52b50 63342076 5f6f6666 73657473 3b200a20 c4 v_offsets; . │ │ │ │ + 0x00d52b60 20696e20 76656334 20765f63 6f6c6f72 in vec4 v_color │ │ │ │ + 0x00d52b70 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d52b80 46726167 436f6c6f 723b200a 2020636f FragColor; . co │ │ │ │ + 0x00d52b90 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d52ba0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d52bb0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d52bc0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d52bd0 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d52be0 20765f63 6f6c6f72 3b200a20 20202076 v_color; . v │ │ │ │ + 0x00d52bf0 65633220 72616469 75733b20 0a202020 ec2 radius; . │ │ │ │ + 0x00d52c00 20726164 6975732e 78203d20 6d617828 radius.x = max( │ │ │ │ + 0x00d52c10 302e302c 20616273 28765f6f 66667365 0.0, abs(v_offse │ │ │ │ + 0x00d52c20 74732e78 29202d20 765f6f66 66736574 ts.x) - v_offset │ │ │ │ + 0x00d52c30 732e7a29 3b200a20 20202072 61646975 s.z); . radiu │ │ │ │ + 0x00d52c40 732e7920 3d206d61 7828302e 302c2061 s.y = max(0.0, a │ │ │ │ + 0x00d52c50 62732876 5f6f6666 73657473 2e792920 bs(v_offsets.y) │ │ │ │ + 0x00d52c60 2d20765f 6f666673 6574732e 77293b20 - v_offsets.w); │ │ │ │ + 0x00d52c70 0a202020 20666c6f 6174206d 61785261 . float maxRa │ │ │ │ + 0x00d52c80 64697573 203d2031 2e303b20 0a202020 dius = 1.0; . │ │ │ │ + 0x00d52c90 20666c6f 61742061 61526164 69757320 float aaRadius │ │ │ │ + 0x00d52ca0 3d20302e 393b200a 20202020 666c6f61 = 0.9; . floa │ │ │ │ + 0x00d52cb0 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ + 0x00d52cc0 6f6f7468 73746570 28616152 61646975 oothstep(aaRadiu │ │ │ │ + 0x00d52cd0 73202a20 61615261 64697573 2c206d61 s * aaRadius, ma │ │ │ │ + 0x00d52ce0 78526164 69757320 2a206d61 78526164 xRadius * maxRad │ │ │ │ + 0x00d52cf0 6975732c 20646f74 28726164 6975732e ius, dot(radius. │ │ │ │ + 0x00d52d00 78792c20 72616469 75732e78 7929293b xy, radius.xy)); │ │ │ │ + 0x00d52d10 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00d52d20 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ + 0x00d52d30 61202a20 28312e30 202d2073 74657056 a * (1.0 - stepV │ │ │ │ + 0x00d52d40 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ + 0x00d52d50 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d52d60 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d52d70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d52d80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d52d90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d52da0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d52db0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d52dc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d52dd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d52de0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d52df0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d52e00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d52e10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d52e20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d52e30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d52e40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d52e50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d52e60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d52e70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d52e80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d52e90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d52ea0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d52eb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d52ec0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d52ed0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d52ee0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d52ef0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d52f00 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d52f10 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d52f20 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d52f30 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d52f40 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d52f50 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d52f60 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d52f70 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d52f80 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d52f90 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d52fa0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d52fb0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d52fc0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d52fd0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d52fe0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d52ff0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d53000 733b200a 2020636f 6e737420 666c6f61 s; . const floa │ │ │ │ + 0x00d53010 74206b41 6e746961 6c696173 696e6753 t kAntialiasingS │ │ │ │ + 0x00d53020 63616c61 72203d20 302e393b 200a2020 calar = 0.9; . │ │ │ │ + 0x00d53030 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d53040 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d53050 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ + 0x00d53060 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d53070 20666c6f 61742064 203d2064 6f742876 float d = dot(v │ │ │ │ + 0x00d53080 5f726164 6975732e 78792c20 765f7261 _radius.xy, v_ra │ │ │ │ + 0x00d53090 64697573 2e787929 3b200a20 20202076 dius.xy); . v │ │ │ │ + 0x00d530a0 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d530b0 20765f63 6f6c6f72 3b200a20 20202066 v_color; . f │ │ │ │ + 0x00d530c0 6c6f6174 20616152 61646975 73203d20 loat aaRadius = │ │ │ │ + 0x00d530d0 765f7261 64697573 2e7a202a 206b416e v_radius.z * kAn │ │ │ │ + 0x00d530e0 7469616c 69617369 6e675363 616c6172 tialiasingScalar │ │ │ │ + 0x00d530f0 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ + 0x00d53100 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ + 0x00d53110 74657028 61615261 64697573 202a2061 tep(aaRadius * a │ │ │ │ + 0x00d53120 61526164 6975732c 20765f72 61646975 aRadius, v_radiu │ │ │ │ + 0x00d53130 732e7a20 2a20765f 72616469 75732e7a s.z * v_radius.z │ │ │ │ + 0x00d53140 2c206429 3b200a20 20202066 696e616c , d); . final │ │ │ │ + 0x00d53150 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ + 0x00d53160 6f6c6f72 2e61202a 20755f6f 70616369 olor.a * u_opaci │ │ │ │ + 0x00d53170 7479202a 2028312e 30202d20 73746570 ty * (1.0 - step │ │ │ │ + 0x00d53180 56616c75 65293b20 0a202020 20765f46 Value); . v_F │ │ │ │ + 0x00d53190 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ + 0x00d531a0 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ + 0x00d531b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d531c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d531d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d531e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d531f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d53200 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d53210 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d53220 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d53230 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d53240 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d53250 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d53260 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d53270 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d53280 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d53290 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d532a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d532b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d532c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d532d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d532e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d532f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d53300 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d53310 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d53320 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d53330 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ + 0x00d53340 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d53350 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ + 0x00d53360 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ + 0x00d53370 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ + 0x00d53380 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ + 0x00d53390 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ + 0x00d533a0 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ + 0x00d533b0 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ + 0x00d533c0 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ + 0x00d533d0 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ + 0x00d533e0 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ + 0x00d533f0 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ + 0x00d53400 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d53410 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ + 0x00d53420 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ + 0x00d53430 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ + 0x00d53440 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d53450 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ + 0x00d53460 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d53470 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ + 0x00d53480 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ + 0x00d53490 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ + 0x00d534a0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d534b0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d534c0 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00d534d0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d534e0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d534f0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d53500 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00d53510 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d53520 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d53530 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00d53540 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00d53550 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00d53560 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d53570 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00d53580 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d53590 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d535a0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d535b0 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00d535c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d535d0 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00d535e0 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00d535f0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d53600 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d53610 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00d53620 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00d53630 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d53640 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00d53650 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00d53660 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d53670 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00d53680 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00d53690 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00d536a0 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00d536b0 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00d536c0 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d536d0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d536e0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d536f0 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00d53700 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00d53710 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00d53720 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00d53730 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00d53740 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d53750 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00d53760 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00d53770 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d53780 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00d53790 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00d537a0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d537b0 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00d537c0 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00d537d0 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00d537e0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d537f0 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00d53800 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00d53810 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00d53820 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00d53830 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00d53840 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00d53850 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00d53860 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00d53870 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00d53880 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00d53890 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00d538a0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d538b0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d538c0 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00d538d0 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00d538e0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d538f0 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00d53900 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00d53910 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00d53920 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00d53930 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00d53940 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00d53950 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00d53960 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00d53970 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00d53980 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00d53990 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d539a0 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00d539b0 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00d539c0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d539d0 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00d539e0 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00d539f0 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00d53a00 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d53a10 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00d53a20 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d53a30 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ + 0x00d53a40 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ + 0x00d53a50 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ + 0x00d53a60 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ + 0x00d53a70 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ + 0x00d53a80 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ + 0x00d53a90 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d53aa0 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ + 0x00d53ab0 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ + 0x00d53ac0 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ + 0x00d53ad0 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d53ae0 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ + 0x00d53af0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d53b00 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ + 0x00d53b10 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ + 0x00d53b20 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ + 0x00d53b30 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d53b40 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ + 0x00d53b50 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d53b60 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ + 0x00d53b70 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ + 0x00d53b80 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ + 0x00d53b90 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ + 0x00d53ba0 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ + 0x00d53bb0 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ + 0x00d53bc0 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00d53bd0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d53be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d53bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d53c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d53c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d53c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d53c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d53c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d53c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d53c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d53c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d53c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d53c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d53ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d53cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d53cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d53cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d53ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d53cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d53d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d53d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d53d20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d53d30 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d53d40 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d53d50 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d53d60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d53d70 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d53d80 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d53d90 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d53da0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d53db0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d53dc0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d53dd0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d53de0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d53df0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d53e00 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d53e10 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d53e20 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d53e30 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d53e40 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d53e50 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d53e60 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d53e70 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d53e80 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d53e90 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d53ea0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d53eb0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d53ec0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d53ed0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d53ee0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d53ef0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d53f00 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d53f10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d53f20 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d53f30 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d53f40 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d53f50 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d53f60 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d53f70 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d53f80 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d53f90 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d53fa0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d53fb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d53fc0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d53fd0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d53fe0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d53ff0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d54000 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d54010 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d54020 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d54030 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d54040 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d54050 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d54060 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d54070 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d54080 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d54090 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d540a0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d540b0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d540c0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d540d0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d540e0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d540f0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d54100 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d54110 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d54120 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d54130 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d54140 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d54150 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d54160 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d54170 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d54180 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d54190 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d541a0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d541b0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d541c0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d541d0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d541e0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d541f0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d54200 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d54210 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d54220 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d54230 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d54240 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d54250 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d54260 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d54270 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d54280 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d54290 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d542a0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d542b0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d542c0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d542d0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d542e0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d542f0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d54300 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d54310 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d54320 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d54330 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d54340 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d54350 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d54360 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d54370 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d54380 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d54390 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d543a0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d543b0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d543c0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d543d0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d543e0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d543f0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d54400 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d54410 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d54420 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d54430 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d54440 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00d54450 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d54460 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00d54470 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ + 0x00d54480 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ + 0x00d54490 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d544a0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d544b0 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ + 0x00d544c0 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ + 0x00d544d0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d544e0 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ + 0x00d544f0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00d54500 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00d54510 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 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 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d54680 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d54690 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d546a0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d546b0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d546c0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d546d0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d546e0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d546f0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d54700 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00d54710 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d54720 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00d54730 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00d54740 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00d54750 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d54760 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d54770 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d54780 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d54790 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00d547a0 75743b20 0a202075 6e69666f 726d2073 ut; . uniform s │ │ │ │ + 0x00d547b0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00d547c0 5465783b 200a2020 636f6e73 7420666c Tex; . const fl │ │ │ │ + 0x00d547d0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d547e0 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d547f0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d54800 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ + 0x00d54810 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ + 0x00d54820 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00d54830 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ + 0x00d54840 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ + 0x00d54850 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ + 0x00d54860 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00d54870 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ + 0x00d54880 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d54890 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d548a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d548b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d548c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d548d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d548e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d548f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d54900 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d54910 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d54920 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d54930 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d54940 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d54950 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d54960 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d54970 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d54980 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d54990 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d549a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d549b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d549c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d549d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d549e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d549f0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d54a00 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d54a10 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d54a20 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d54a30 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00d54a40 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ + 0x00d54a50 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00d54a60 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ + 0x00d54a70 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d54a80 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d54a90 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d54aa0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d54ab0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d54ac0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d54ad0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d54ae0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d54af0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d54b00 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d54b10 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d54b20 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d54b30 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d54b40 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d54b50 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d54b60 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d54b70 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d54b80 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d54b90 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d54ba0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d54bb0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d54bc0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d54bd0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d54be0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d54bf0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d54c00 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d54c10 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d54c20 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d54c30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d54c40 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d54c50 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d54c60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d54c70 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d54c80 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d54c90 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d54ca0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d54cb0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d54cc0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d54cd0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d54ce0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d54cf0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d54d00 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d54d10 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d54d20 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d54d30 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d54d40 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d54d50 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d54d60 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d54d70 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d54d80 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d54d90 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d54da0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d54db0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d54dc0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d54dd0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d54de0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d54df0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d54e00 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d54e10 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d54e20 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d54e30 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d54e40 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d54e50 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d54e60 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d54e70 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d54e80 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d54e90 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d54ea0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d54eb0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d54ec0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d54ed0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d54ee0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d54ef0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d54f00 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d54f10 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d54f20 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d54f30 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d54f40 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d54f50 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d54f60 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d54f70 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d54f80 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d54f90 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d54fa0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d54fb0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d54fc0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d54fd0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d54fe0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d54ff0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d55000 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ + 0x00d55010 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d55020 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ + 0x00d55030 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ + 0x00d55040 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00d55050 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ + 0x00d55060 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ + 0x00d55070 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ + 0x00d55080 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d55090 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ + 0x00d550a0 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ + 0x00d550b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d550c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d550d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d550e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d550f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d55100 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d55110 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d55120 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d55130 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d55140 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d55150 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d55160 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d55170 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d55180 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d55190 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d551a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d551b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d551c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d551d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d551e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d551f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d55200 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d55210 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d55220 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d55230 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d55240 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d55250 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d55260 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d55270 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d55280 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d55290 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d552a0 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d552b0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d552c0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d552d0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d552e0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d552f0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d55300 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d55310 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d55320 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d55330 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d55340 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d55350 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d55360 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d55370 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d55380 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d55390 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d553a0 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d553b0 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00d553c0 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00d553d0 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00d553e0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d553f0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d55400 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d55410 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ + 0x00d55420 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ + 0x00d55430 50207665 63342066 696e616c 436f6c6f P vec4 finalColo │ │ │ │ + 0x00d55440 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00d55450 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ + 0x00d55460 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ + 0x00d55470 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ + 0x00d55480 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ + 0x00d55490 78436f6f 72647329 3b200a20 2023656e xCoords); . #en │ │ │ │ + 0x00d554a0 64696620 0a202020 20666c6f 61742073 dif . float s │ │ │ │ + 0x00d554b0 6d616c6c 52616469 7573203d 20765f72 mallRadius = v_r │ │ │ │ + 0x00d554c0 61646975 732e7a20 2d206161 50697865 adius.z - aaPixe │ │ │ │ + 0x00d554d0 6c73436f 756e743b 200a2020 2020666c lsCount; . fl │ │ │ │ + 0x00d554e0 6f617420 73746570 56616c75 65203d20 oat stepValue = │ │ │ │ + 0x00d554f0 736d6f6f 74687374 65702873 6d616c6c smoothstep(small │ │ │ │ + 0x00d55500 52616469 7573202a 20736d61 6c6c5261 Radius * smallRa │ │ │ │ + 0x00d55510 64697573 2c20765f 72616469 75732e7a dius, v_radius.z │ │ │ │ + 0x00d55520 202a2076 5f726164 6975732e 7a2c200a * v_radius.z, . │ │ │ │ + 0x00d55530 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d55540 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d55550 20765f72 61646975 732e7820 2a20765f v_radius.x * v_ │ │ │ │ + 0x00d55560 72616469 75732e78 202b2076 5f726164 radius.x + v_rad │ │ │ │ + 0x00d55570 6975732e 79202a20 765f7261 64697573 ius.y * v_radius │ │ │ │ + 0x00d55580 2e79293b 200a2020 20206669 6e616c43 .y); . finalC │ │ │ │ + 0x00d55590 6f6c6f72 2e61203d 2066696e 616c436f olor.a = finalCo │ │ │ │ + 0x00d555a0 6c6f722e 61202a20 755f6f70 61636974 lor.a * u_opacit │ │ │ │ + 0x00d555b0 79202a20 28312e30 202d2073 74657056 y * (1.0 - stepV │ │ │ │ + 0x00d555c0 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ + 0x00d555d0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d555e0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d555f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d55600 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d55610 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d55620 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d55630 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d55640 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d55650 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d55660 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d55670 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d55680 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d55690 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d556a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d556b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d556c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d556d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d556e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d556f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d55700 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d55710 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d55720 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d55730 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d55740 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d55750 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00d55760 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d55770 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d55780 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d55790 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d557a0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d557b0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d557c0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d557d0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d557e0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d557f0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d55800 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d55810 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d55820 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d55830 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d55840 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d55850 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d55860 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d55870 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d55880 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d55890 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d558a0 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d558b0 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d558c0 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d558d0 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d558e0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d558f0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d55900 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d55910 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d55920 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d55930 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d55940 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d55950 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00d55960 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ + 0x00d55970 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ + 0x00d55980 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ + 0x00d55990 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ + 0x00d559a0 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ + 0x00d559b0 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ + 0x00d559c0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d559d0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d559e0 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d559f0 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ + 0x00d55a00 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ + 0x00d55a10 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ + 0x00d55a20 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ + 0x00d55a30 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ + 0x00d55a40 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ + 0x00d55a50 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ + 0x00d55a60 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ + 0x00d55a70 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ + 0x00d55a80 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ + 0x00d55a90 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ + 0x00d55aa0 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ + 0x00d55ab0 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ + 0x00d55ac0 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ + 0x00d55ad0 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ + 0x00d55ae0 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00d55af0 76656334 206d6169 6e4f7574 6c696e65 vec4 mainOutline │ │ │ │ + 0x00d55b00 436f6c6f 72203d20 6d697828 755f6f75 Color = mix(u_ou │ │ │ │ + 0x00d55b10 746c696e 65436f6c 6f722c20 755f6661 tlineColor, u_fa │ │ │ │ + 0x00d55b20 6b654f75 746c696e 65436f6c 6f722c20 keOutlineColor, │ │ │ │ + 0x00d55b30 636f6566 732e7829 3b200a20 2020206d coefs.x); . m │ │ │ │ + 0x00d55b40 61696e4f 75746c69 6e65436f 6c6f7220 ainOutlineColor │ │ │ │ + 0x00d55b50 3d206d69 78286d61 696e4f75 746c696e = mix(mainOutlin │ │ │ │ + 0x00d55b60 65436f6c 6f722c20 755f6661 6b654f75 eColor, u_fakeOu │ │ │ │ + 0x00d55b70 746c696e 65436f6c 6f722c20 636f6566 tlineColor, coef │ │ │ │ + 0x00d55b80 732e7929 3b200a20 20202076 65633420 s.y); . vec4 │ │ │ │ + 0x00d55b90 636f6c6f 72203d20 6d697828 6d697828 color = mix(mix( │ │ │ │ + 0x00d55ba0 6d61696e 436f6c6f 722c2076 65633428 mainColor, vec4( │ │ │ │ + 0x00d55bb0 765f636f 6c6f722e 7267622c 20312e30 v_color.rgb, 1.0 │ │ │ │ + 0x00d55bc0 292c2076 5f636f6c 6f722e61 292c206d ), v_color.a), m │ │ │ │ + 0x00d55bd0 61696e43 6f6c6f72 2c207374 65702875 ainColor, step(u │ │ │ │ + 0x00d55be0 5f726f75 74655061 72616d73 2e772c20 _routeParams.w, │ │ │ │ + 0x00d55bf0 302e3029 293b200a 20202020 636f6c6f 0.0)); . colo │ │ │ │ + 0x00d55c00 72203d20 6d697828 636f6c6f 722c206d r = mix(color, m │ │ │ │ + 0x00d55c10 61696e4f 75746c69 6e65436f 6c6f722c ainOutlineColor, │ │ │ │ + 0x00d55c20 20737465 70286b4f 75746c69 6e655468 step(kOutlineTh │ │ │ │ + 0x00d55c30 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ + 0x00d55c40 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ + 0x00d55c50 2020636f 6c6f7220 3d206d69 7828636f color = mix(co │ │ │ │ + 0x00d55c60 6c6f722c 206d6169 6e4f7574 6c696e65 lor, mainOutline │ │ │ │ + 0x00d55c70 436f6c6f 722c2073 6d6f6f74 68737465 Color, smoothste │ │ │ │ + 0x00d55c80 70286b4f 75746c69 6e655468 72657368 p(kOutlineThresh │ │ │ │ + 0x00d55c90 6f6c6432 2c206b4f 75746c69 6e655468 old2, kOutlineTh │ │ │ │ + 0x00d55ca0 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ + 0x00d55cb0 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ + 0x00d55cc0 2020636f 6c6f722e 61202a3d 2028312e color.a *= (1. │ │ │ │ + 0x00d55cd0 30202d20 736d6f6f 74687374 6570286b 0 - smoothstep(k │ │ │ │ + 0x00d55ce0 416e7469 616c6961 73696e67 54687265 AntialiasingThre │ │ │ │ + 0x00d55cf0 73686f6c 642c2031 2e302c20 61627328 shold, 1.0, abs( │ │ │ │ + 0x00d55d00 765f6c65 6e677468 2e792929 293b200a v_length.y))); . │ │ │ │ + 0x00d55d10 20202020 636f6c6f 72203d20 76656334 color = vec4 │ │ │ │ + 0x00d55d20 286d6978 28636f6c 6f722e72 67622c20 (mix(color.rgb, │ │ │ │ + 0x00d55d30 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ + 0x00d55d40 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ + 0x00d55d50 20636f6c 6f722e61 293b200a 20202020 color.a); . │ │ │ │ + 0x00d55d60 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ + 0x00d55d70 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ 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 │ │ │ │ @@ -53224,5174 +53224,5174 @@ │ │ │ │ 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 │ │ │ │ + 0x00d55ec0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d55ed0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d55ee0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d55ef0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d55f00 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d55f10 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d55f20 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d55f30 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d55f40 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00d55f50 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00d55f60 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d55f70 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00d55f80 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00d55f90 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00d55fa0 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00d55fb0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d55fc0 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00d55fd0 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00d55fe0 6d207665 63322075 5f706f73 6974696f m vec2 u_positio │ │ │ │ + 0x00d55ff0 6e3b200a 2020756e 69666f72 6d20666c n; . uniform fl │ │ │ │ + 0x00d56000 6f617420 755f6973 4f75746c 696e6550 oat u_isOutlineP │ │ │ │ + 0x00d56010 6173733b 200a2020 756e6966 6f726d20 ass; . uniform │ │ │ │ + 0x00d56020 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d56030 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d56040 7420755f 6c656e67 74683b20 0a202075 t u_length; . u │ │ │ │ + 0x00d56050 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d56060 20755f6d 61736b54 65783b20 0a202063 u_maskTex; . c │ │ │ │ + 0x00d56070 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d56080 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d56090 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ + 0x00d560a0 61696e28 29200a20 207b200a 20202369 ain() . { . #i │ │ │ │ + 0x00d560b0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d560c0 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ + 0x00d560d0 676c7970 68436f6c 6f72203d 20765f63 glyphColor = v_c │ │ │ │ + 0x00d560e0 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00d560f0 20202020 4c4f575f 50207665 63342067 LOW_P vec4 g │ │ │ │ + 0x00d56100 6c797068 436f6c6f 72203d20 74657874 lyphColor = text │ │ │ │ + 0x00d56110 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d56120 765f636f 6c6f7254 6578436f 6f726429 v_colorTexCoord) │ │ │ │ + 0x00d56130 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d56140 20666c6f 61742064 69737420 3d207465 float dist = te │ │ │ │ + 0x00d56150 78747572 6528755f 6d61736b 5465782c xture(u_maskTex, │ │ │ │ + 0x00d56160 20765f6d 61736b54 6578436f 6f726429 v_maskTexCoord) │ │ │ │ + 0x00d56170 2e723b20 0a202020 20666c6f 61742061 .r; . float a │ │ │ │ + 0x00d56180 6c706861 203d2073 6d6f6f74 68737465 lpha = smoothste │ │ │ │ + 0x00d56190 7028755f 636f6e74 72617374 47616d6d p(u_contrastGamm │ │ │ │ + 0x00d561a0 612e7820 2d20755f 636f6e74 72617374 a.x - u_contrast │ │ │ │ + 0x00d561b0 47616d6d 612e792c 20755f63 6f6e7472 Gamma.y, u_contr │ │ │ │ + 0x00d561c0 61737447 616d6d61 2e78202b 20755f63 astGamma.x + u_c │ │ │ │ + 0x00d561d0 6f6e7472 61737447 616d6d61 2e792c20 ontrastGamma.y, │ │ │ │ + 0x00d561e0 64697374 29202a20 755f6f70 61636974 dist) * u_opacit │ │ │ │ + 0x00d561f0 793b200a 20202020 676c7970 68436f6c y; . glyphCol │ │ │ │ + 0x00d56200 6f722e61 202a3d20 616c7068 613b200a or.a *= alpha; . │ │ │ │ + 0x00d56210 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ + 0x00d56220 3d20676c 79706843 6f6c6f72 3b200a20 = glyphColor; . │ │ │ │ + 0x00d56230 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d56240 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d56250 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d56260 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d56270 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d56280 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d56290 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d562a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d562b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d562c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d562d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d562e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d562f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d56300 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d56310 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d56320 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d56330 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d56340 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d56350 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d56360 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d56370 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d56380 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d56390 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d563a0 696e2076 65633220 765f7465 78436f6f in vec2 v_texCoo │ │ │ │ + 0x00d563b0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d563c0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d563d0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d563e0 7472616e 73666f72 6d3b200a 2020756e transform; . un │ │ │ │ + 0x00d563f0 69666f72 6d206d61 74342075 5f6e6f72 iform mat4 u_nor │ │ │ │ + 0x00d56400 6d616c54 72616e73 666f726d 3b200a20 malTransform; . │ │ │ │ + 0x00d56410 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d56420 636f6c6f 723b200a 2020756e 69666f72 color; . unifor │ │ │ │ + 0x00d56430 6d207665 63322075 5f746578 436f6f72 m vec2 u_texCoor │ │ │ │ + 0x00d56440 64466c69 7070696e 673b200a 2020756e dFlipping; . un │ │ │ │ + 0x00d56450 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d56460 755f636f 6c6f7254 65783b20 0a202063 u_colorTex; . c │ │ │ │ + 0x00d56470 6f6e7374 20766563 33206c69 67687444 onst vec3 lightD │ │ │ │ + 0x00d56480 6972203d 20766563 3328302e 3331362c ir = vec3(0.316, │ │ │ │ + 0x00d56490 20302e30 2c20302e 39343829 3b200a20 0.0, 0.948); . │ │ │ │ + 0x00d564a0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d564b0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d564c0 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d564d0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d564e0 2020666c 6f617420 70686f6e 67446966 float phongDif │ │ │ │ + 0x00d564f0 66757365 203d206d 61782830 2e302c20 fuse = max(0.0, │ │ │ │ + 0x00d56500 2d646f74 286c6967 68744469 722c2076 -dot(lightDir, v │ │ │ │ + 0x00d56510 5f6e6f72 6d616c29 293b200a 20202020 _normal)); . │ │ │ │ + 0x00d56520 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ + 0x00d56530 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ + 0x00d56540 20765f74 6578436f 6f726473 29202a20 v_texCoords) * │ │ │ │ + 0x00d56550 755f636f 6c6f723b 200a2020 2020765f u_color; . v_ │ │ │ │ + 0x00d56560 46726167 436f6c6f 72203d20 76656334 FragColor = vec4 │ │ │ │ + 0x00d56570 28287068 6f6e6744 69666675 7365202a ((phongDiffuse * │ │ │ │ + 0x00d56580 20302e35 202b2030 2e352920 2a20636f 0.5 + 0.5) * co │ │ │ │ + 0x00d56590 6c6f722e 7267622c 20636f6c 6f722e61 lor.rgb, color.a │ │ │ │ + 0x00d565a0 293b200a 20207d20 0a000000 00000000 ); . } ........ │ │ │ │ + 0x00d565b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d565c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d565d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d565e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d565f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d56600 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d56610 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d56620 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d56630 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d56640 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d56650 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d56660 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d56670 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d56680 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d56690 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d566a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d566b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d566c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d566d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d566e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d566f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d56700 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d56710 63342076 5f636f6c 6f723b20 0a20206f c4 v_color; . o │ │ │ │ + 0x00d56720 75742076 65633420 765f4672 6167436f ut vec4 v_FragCo │ │ │ │ + 0x00d56730 6c6f723b 200a2020 636f6e73 7420666c lor; . const fl │ │ │ │ + 0x00d56740 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d56750 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d56760 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d56770 20207b20 0a202020 20765f46 72616743 { . v_FragC │ │ │ │ + 0x00d56780 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ + 0x00d56790 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d567a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d567b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d567c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d567d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d567e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d567f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d56800 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d56810 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d56820 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d56830 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d56840 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d56850 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d56860 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d56870 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d56880 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d56890 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d568a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d568b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d568c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d568d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d568e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d568f0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d56900 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d56910 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d56920 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d56930 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00d56940 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ + 0x00d56950 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ + 0x00d56960 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ + 0x00d56970 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d56980 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ + 0x00d56990 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ + 0x00d569a0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d569b0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d569c0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d569d0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d569e0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d569f0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d56a00 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d56a10 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d56a20 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d56a30 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d56a40 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d56a50 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d56a60 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d56a70 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d56a80 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d56a90 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d56aa0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d56ab0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d56ac0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d56ad0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d56ae0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d56af0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d56b00 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d56b10 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d56b20 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d56b30 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d56b40 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d56b50 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d56b60 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d56b70 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d56b80 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d56b90 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d56ba0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d56bb0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d56bc0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d56bd0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d56be0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d56bf0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d56c00 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d56c10 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d56c20 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d56c30 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d56c40 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d56c50 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d56c60 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d56c70 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d56c80 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d56c90 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d56ca0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d56cb0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d56cc0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d56cd0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d56ce0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d56cf0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d56d00 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d56d10 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d56d20 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d56d30 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d56d40 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d56d50 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d56d60 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d56d70 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d56d80 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d56d90 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d56da0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d56db0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d56dc0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d56dd0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d56de0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d56df0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d56e00 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d56e10 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d56e20 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d56e30 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d56e40 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d56e50 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d56e60 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d56e70 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d56e80 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d56e90 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d56ea0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d56eb0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d56ec0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d56ed0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d56ee0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d56ef0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d56f00 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d56f10 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d56f20 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d56f30 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ + 0x00d56f40 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ + 0x00d56f50 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ + 0x00d56f60 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ + 0x00d56f70 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00d56f80 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ + 0x00d56f90 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ + 0x00d56fa0 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ + 0x00d56fb0 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ + 0x00d56fc0 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ + 0x00d56fd0 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ + 0x00d56fe0 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ + 0x00d56ff0 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ + 0x00d57000 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ + 0x00d57010 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ + 0x00d57020 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00d57030 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ + 0x00d57040 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ + 0x00d57050 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ + 0x00d57060 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ + 0x00d57070 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ + 0x00d57080 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d57090 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d570a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d570b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d570c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d570d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d570e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d570f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d57100 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d57110 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d57120 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d57130 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d57140 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d57150 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d57160 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d57170 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d57180 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d57190 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d571a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d571b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d571c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d571d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d571e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d571f0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d57200 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00d57210 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ + 0x00d57220 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ + 0x00d57230 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ + 0x00d57240 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00d57250 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ + 0x00d57260 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ + 0x00d57270 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ + 0x00d57280 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d57290 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d572a0 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00d572b0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d572c0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d572d0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d572e0 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00d572f0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d57300 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d57310 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00d57320 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00d57330 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00d57340 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d57350 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00d57360 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d57370 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d57380 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d57390 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00d573a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d573b0 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00d573c0 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00d573d0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d573e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d573f0 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00d57400 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00d57410 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d57420 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00d57430 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00d57440 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d57450 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00d57460 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00d57470 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00d57480 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00d57490 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00d574a0 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d574b0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d574c0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d574d0 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00d574e0 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00d574f0 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00d57500 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00d57510 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00d57520 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d57530 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00d57540 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00d57550 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d57560 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00d57570 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00d57580 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d57590 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00d575a0 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00d575b0 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00d575c0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d575d0 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00d575e0 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00d575f0 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00d57600 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00d57610 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00d57620 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00d57630 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00d57640 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00d57650 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00d57660 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00d57670 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00d57680 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d57690 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d576a0 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00d576b0 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00d576c0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d576d0 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00d576e0 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00d576f0 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00d57700 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00d57710 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00d57720 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00d57730 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00d57740 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00d57750 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00d57760 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00d57770 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d57780 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00d57790 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00d577a0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d577b0 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00d577c0 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00d577d0 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00d577e0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d577f0 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00d57800 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d57810 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ + 0x00d57820 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ + 0x00d57830 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ + 0x00d57840 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d57850 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d57860 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00d57870 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ + 0x00d57880 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00d57890 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00d578a0 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00d578b0 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00d578c0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d578d0 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00d578e0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00d578f0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00d57900 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ + 0x00d57910 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d57920 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d57930 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d57940 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d57950 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d57960 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d57970 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d57980 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d57990 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d579a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d579b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d579c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d579d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d579e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d579f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d57a00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d57a10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d57a20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d57a30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d57a40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d57a50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d57a60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d57a70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d57a80 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d57a90 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d57aa0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d57ab0 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d57ac0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d57ad0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d57ae0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d57af0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d57b00 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d57b10 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d57b20 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d57b30 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d57b40 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ + 0x00d57b50 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ + 0x00d57b60 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ + 0x00d57b70 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ + 0x00d57b80 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ + 0x00d57b90 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d57ba0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d57bb0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d57bc0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d57bd0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d57be0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d57bf0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d57c00 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d57c10 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d57c20 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d57c30 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d57c40 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d57c50 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d57c60 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d57c70 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d57c80 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d57c90 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d57ca0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d57cb0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d57cc0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d57cd0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d57ce0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d57cf0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d57d00 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d57d10 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d57d20 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d57d30 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d57d40 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d57d50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d57d60 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d57d70 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d57d80 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d57d90 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d57da0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d57db0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d57dc0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d57dd0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d57de0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d57df0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d57e00 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d57e10 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d57e20 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d57e30 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d57e40 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d57e50 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d57e60 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d57e70 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d57e80 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d57e90 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d57ea0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d57eb0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d57ec0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d57ed0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d57ee0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d57ef0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d57f00 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d57f10 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d57f20 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d57f30 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d57f40 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d57f50 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d57f60 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d57f70 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d57f80 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d57f90 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d57fa0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d57fb0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d57fc0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d57fd0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d57fe0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d57ff0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d58000 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d58010 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d58020 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d58030 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d58040 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d58050 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d58060 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d58070 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d58080 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d58090 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d580a0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d580b0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d580c0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d580d0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d580e0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d580f0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d58100 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d58110 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d58120 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d58130 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ + 0x00d58140 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ + 0x00d58150 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d58160 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d58170 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d58180 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d58190 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d581a0 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ + 0x00d581b0 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ + 0x00d581c0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00d581d0 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ + 0x00d581e0 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ + 0x00d581f0 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ + 0x00d58200 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ + 0x00d58210 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d58220 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ + 0x00d58230 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00d58240 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ + 0x00d58250 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ + 0x00d58260 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d58270 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d58280 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ + 0x00d58290 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ + 0x00d582a0 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ + 0x00d582b0 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ + 0x00d582c0 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ + 0x00d582d0 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ + 0x00d582e0 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ + 0x00d582f0 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ + 0x00d58300 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d58310 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ + 0x00d58320 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ + 0x00d58330 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ + 0x00d58340 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d58350 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ + 0x00d58360 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00d58370 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00d58380 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d58390 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ + 0x00d583a0 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ + 0x00d583b0 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ + 0x00d583c0 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ + 0x00d583d0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d583e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d583f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d58400 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d58410 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d58420 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d58430 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d58440 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d58450 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d58460 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d58470 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d58480 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d58490 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d584a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d584b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d584c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d584d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d584e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d584f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d58500 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d58510 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d58520 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d58530 63342076 5f726164 6975733b 200a2020 c4 v_radius; . │ │ │ │ + 0x00d58540 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d58550 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d58560 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d58570 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d58580 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d58590 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d585a0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d585b0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d585c0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d585d0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d585e0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d585f0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d58600 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d58610 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d58620 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d58630 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d58640 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d58650 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d58660 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d58670 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d58680 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d58690 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d586a0 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d586b0 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d586c0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d586d0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d586e0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d586f0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d58700 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d58710 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d58720 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d58730 67506978 656c7343 6f756e74 203d2032 gPixelsCount = 2 │ │ │ │ + 0x00d58740 2e353b20 0a202063 6f6e7374 20666c6f .5; . const flo │ │ │ │ + 0x00d58750 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d58760 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d58770 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d58780 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ + 0x00d58790 616c436f 6c6f7220 3d20765f 636f6c6f alColor = v_colo │ │ │ │ + 0x00d587a0 723b200a 20202020 666c6f61 74206161 r; . float aa │ │ │ │ + 0x00d587b0 52616469 7573203d 206d6178 28765f72 Radius = max(v_r │ │ │ │ + 0x00d587c0 61646975 732e7a20 2d206b41 6e746961 adius.z - kAntia │ │ │ │ + 0x00d587d0 6c696173 696e6750 6978656c 73436f75 liasingPixelsCou │ │ │ │ + 0x00d587e0 6e742c20 302e3029 3b200a20 20202066 nt, 0.0); . f │ │ │ │ + 0x00d587f0 6c6f6174 20737465 7056616c 7565203d loat stepValue = │ │ │ │ + 0x00d58800 20736d6f 6f746873 74657028 61615261 smoothstep(aaRa │ │ │ │ + 0x00d58810 64697573 202a2061 61526164 6975732c dius * aaRadius, │ │ │ │ + 0x00d58820 20765f72 61646975 732e7a20 2a20765f v_radius.z * v_ │ │ │ │ + 0x00d58830 72616469 75732e7a 2c200a20 20202020 radius.z, . │ │ │ │ + 0x00d58840 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d58850 20202020 20202020 20202020 646f7428 dot( │ │ │ │ + 0x00d58860 765f7261 64697573 2e78792c 20765f72 v_radius.xy, v_r │ │ │ │ + 0x00d58870 61646975 732e7879 29293b20 0a202020 adius.xy)); . │ │ │ │ + 0x00d58880 2066696e 616c436f 6c6f722e 61203d20 finalColor.a = │ │ │ │ + 0x00d58890 66696e61 6c436f6c 6f722e61 202a2075 finalColor.a * u │ │ │ │ + 0x00d588a0 5f6f7061 63697479 202a2028 312e3020 _opacity * (1.0 │ │ │ │ + 0x00d588b0 2d207374 65705661 6c756529 3b200a20 - stepValue); . │ │ │ │ + 0x00d588c0 20202069 66202866 696e616c 436f6c6f if (finalColo │ │ │ │ + 0x00d588d0 722e6120 3c20302e 3031207c 7c20755f r.a < 0.01 || u_ │ │ │ │ + 0x00d588e0 726f7574 65506172 616d732e 79203e20 routeParams.y > │ │ │ │ + 0x00d588f0 765f7261 64697573 2e772920 0a202020 v_radius.w) . │ │ │ │ + 0x00d58900 20202064 69736361 72643b20 0a202020 discard; . │ │ │ │ + 0x00d58910 2066696e 616c436f 6c6f7220 3d207665 finalColor = ve │ │ │ │ + 0x00d58920 6334286d 69782866 696e616c 436f6c6f c4(mix(finalColo │ │ │ │ + 0x00d58930 722e7267 622c2075 5f6d6173 6b436f6c r.rgb, u_maskCol │ │ │ │ + 0x00d58940 6f722e72 67622c20 755f6d61 736b436f or.rgb, u_maskCo │ │ │ │ + 0x00d58950 6c6f722e 61292c20 66696e61 6c436f6c lor.a), finalCol │ │ │ │ + 0x00d58960 6f722e61 293b200a 20202020 765f4672 or.a); . v_Fr │ │ │ │ + 0x00d58970 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d58980 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d58990 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d589a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d589b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d589c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d589d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d589e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d589f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d58a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d58a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d58a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d58a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d58a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d58a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d58a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d58a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d58a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d58a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d58aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d58ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d58ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d58ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d58ae0 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00d58af0 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00d58b00 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d58b10 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d58b20 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00d58b30 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d58b40 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00d58b50 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d58b60 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d58b70 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d58b80 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00d58b90 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00d58ba0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d58bb0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d58bc0 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d58bd0 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ + 0x00d58be0 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ + 0x00d58bf0 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ + 0x00d58c00 6f722e61 202a2073 6d6f6f74 68737465 or.a * smoothste │ │ │ │ + 0x00d58c10 7028302e 372c2031 2e302c20 765f696e p(0.7, 1.0, v_in │ │ │ │ + 0x00d58c20 74656e73 69747929 293b200a 20207d20 tensity)); . } │ │ │ │ + 0x00d58c30 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d58c40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d58c50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d58c60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d58c70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d58c80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d58c90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d58ca0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d58cb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d58cc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d58cd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d58ce0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d58cf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d58d00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d58d10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d58d20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d58d30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d58d40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d58d50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d58d60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d58d70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d58d80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d58d90 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d58da0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d58db0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d58dc0 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00d58dd0 73742066 6c6f6174 20616150 6978656c st float aaPixel │ │ │ │ + 0x00d58de0 73436f75 6e74203d 20322e35 3b200a20 sCount = 2.5; . │ │ │ │ + 0x00d58df0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d58e00 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d58e10 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d58e20 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d58e30 20207665 63342066 696e616c 436f6c6f vec4 finalColo │ │ │ │ + 0x00d58e40 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00d58e50 2020666c 6f617420 736d616c 6c526164 float smallRad │ │ │ │ + 0x00d58e60 69757320 3d20765f 72616469 75732e7a ius = v_radius.z │ │ │ │ + 0x00d58e70 202d2061 61506978 656c7343 6f756e74 - aaPixelsCount │ │ │ │ + 0x00d58e80 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ + 0x00d58e90 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ + 0x00d58ea0 74657028 736d616c 6c526164 69757320 tep(smallRadius │ │ │ │ + 0x00d58eb0 2a20736d 616c6c52 61646975 732c2076 * smallRadius, v │ │ │ │ + 0x00d58ec0 5f726164 6975732e 7a202a20 765f7261 _radius.z * v_ra │ │ │ │ + 0x00d58ed0 64697573 2e7a2c20 0a202020 20202020 dius.z, . │ │ │ │ + 0x00d58ee0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d58ef0 20202020 20202020 20646f74 28765f72 dot(v_r │ │ │ │ + 0x00d58f00 61646975 732e7879 2c20765f 72616469 adius.xy, v_radi │ │ │ │ + 0x00d58f10 75732e78 7929293b 200a2020 20206669 us.xy)); . fi │ │ │ │ + 0x00d58f20 6e616c43 6f6c6f72 2e61203d 2066696e nalColor.a = fin │ │ │ │ + 0x00d58f30 616c436f 6c6f722e 61202a20 28312e30 alColor.a * (1.0 │ │ │ │ + 0x00d58f40 202d2073 74657056 616c7565 293b200a - stepValue); . │ │ │ │ + 0x00d58f50 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ + 0x00d58f60 6f722e61 203c2030 2e303129 200a2020 or.a < 0.01) . │ │ │ │ + 0x00d58f70 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00d58f80 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d58f90 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d58fa0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d58fb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d58fc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d58fd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d58fe0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d58ff0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d59000 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d59010 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d59020 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d59030 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d59040 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d59050 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d59060 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d59070 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d59080 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d59090 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d590a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d590b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d590c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d590d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d590e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d590f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d59100 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d59110 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d59120 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d59130 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d59140 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d59150 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d59160 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d59170 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00d59180 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d59190 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d591a0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d591b0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d591c0 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00d591d0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d591e0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00d591f0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00d59200 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d59210 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d59220 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00d59230 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d59240 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d59250 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00d59260 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00d59270 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d59280 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00d59290 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00d592a0 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00d592b0 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00d592c0 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00d592d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d592e0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00d592f0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00d59300 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d59310 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00d59320 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00d59330 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d59340 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00d59350 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00d59360 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00d59370 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00d59380 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d59390 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d593a0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d593b0 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00d593c0 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00d593d0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00d593e0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00d593f0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d59400 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00d59410 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d59420 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00d59430 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00d59440 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00d59450 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00d59460 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00d59470 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00d59480 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00d59490 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00d594a0 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00d594b0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d594c0 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00d594d0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00d594e0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00d594f0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00d59500 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d59510 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00d59520 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00d59530 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00d59540 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00d59550 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00d59560 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d59570 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00d59580 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00d59590 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d595a0 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00d595b0 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00d595c0 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00d595d0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00d595e0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00d595f0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d59600 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00d59610 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d59620 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00d59630 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00d59640 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00d59650 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00d59660 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00d59670 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d59680 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00d59690 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00d596a0 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00d596b0 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00d596c0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d596d0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00d596e0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d596f0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d59700 203d2061 5f74636f 6f72643b 200a2020 = a_tcoord; . │ │ │ │ + 0x00d59710 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d59720 76656334 28615f70 6f732c20 302e302c vec4(a_pos, 0.0, │ │ │ │ + 0x00d59730 20312e30 293b200a 20207d20 0a000000 1.0); . } .... │ │ │ │ + 0x00d59740 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d59750 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d59760 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d59770 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d59780 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d59790 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d597a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d597b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d597c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d597d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d597e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d597f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d59800 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d59810 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d59820 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d59830 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d59840 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d59850 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d59860 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d59870 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d59880 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d59890 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d598a0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d598b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d598c0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d598d0 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ + 0x00d598e0 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ + 0x00d598f0 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00d59900 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ + 0x00d59910 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ + 0x00d59920 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ + 0x00d59930 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d59940 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d59950 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d59960 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d59970 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d59980 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d59990 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00d599a0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d599b0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d599c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d599d0 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ + 0x00d599e0 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ + 0x00d599f0 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ + 0x00d59a00 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ + 0x00d59a10 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ + 0x00d59a20 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d59a30 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d59a40 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00d59a50 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d59a60 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d59a70 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d59a80 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d59a90 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00d59aa0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d59ab0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00d59ac0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00d59ad0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d59ae0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d59af0 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00d59b00 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d59b10 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d59b20 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00d59b30 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00d59b40 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d59b50 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00d59b60 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00d59b70 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00d59b80 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00d59b90 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00d59ba0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d59bb0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00d59bc0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00d59bd0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d59be0 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00d59bf0 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00d59c00 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d59c10 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00d59c20 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00d59c30 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00d59c40 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00d59c50 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d59c60 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d59c70 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d59c80 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00d59c90 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00d59ca0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00d59cb0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00d59cc0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d59cd0 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00d59ce0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d59cf0 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00d59d00 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00d59d10 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00d59d20 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00d59d30 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00d59d40 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00d59d50 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00d59d60 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00d59d70 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00d59d80 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d59d90 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00d59da0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00d59db0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00d59dc0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00d59dd0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d59de0 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00d59df0 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00d59e00 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00d59e10 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00d59e20 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00d59e30 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d59e40 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00d59e50 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00d59e60 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d59e70 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00d59e80 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00d59e90 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00d59ea0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00d59eb0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00d59ec0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d59ed0 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00d59ee0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d59ef0 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00d59f00 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00d59f10 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00d59f20 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00d59f30 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00d59f40 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d59f50 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00d59f60 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00d59f70 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00d59f80 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00d59f90 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d59fa0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00d59fb0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d59fc0 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ + 0x00d59fd0 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ + 0x00d59fe0 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ + 0x00d59ff0 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ + 0x00d5a000 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00d5a010 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d5a020 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00d5a030 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00d5a040 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00d5a050 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ + 0x00d5a060 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ + 0x00d5a070 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ + 0x00d5a080 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d5a090 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d5a0a0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00d5a0b0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d5a0c0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00d5a0d0 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ + 0x00d5a0e0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d5a0f0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d5a100 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00d5a110 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ + 0x00d5a120 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ + 0x00d5a130 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ + 0x00d5a140 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ + 0x00d5a150 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ + 0x00d5a160 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ + 0x00d5a170 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ + 0x00d5a180 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ + 0x00d5a190 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ + 0x00d5a1a0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d5a1b0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00d5a1c0 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ + 0x00d5a1d0 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ + 0x00d5a1e0 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ + 0x00d5a1f0 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ + 0x00d5a200 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ + 0x00d5a210 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ + 0x00d5a220 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d5a230 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d5a240 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d5a250 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d5a260 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d5a270 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d5a280 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d5a290 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d5a2a0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d5a2b0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d5a2c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5a2d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5a2e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5a2f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5a300 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5a310 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5a320 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5a330 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5a340 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5a350 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5a360 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5a370 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5a380 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5a390 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5a3a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5a3b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5a3c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5a3d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5a3e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5a3f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5a400 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5a410 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d5a420 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d5a430 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d5a440 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00d5a450 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00d5a460 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00d5a470 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d5a480 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00d5a490 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00d5a4a0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00d5a4b0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00d5a4c0 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00d5a4d0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d5a4e0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00d5a4f0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d5a500 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d5a510 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d5a520 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d5a530 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d5a540 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d5a550 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d5a560 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d5a570 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d5a580 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d5a590 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d5a5a0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d5a5b0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d5a5c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d5a5d0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d5a5e0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d5a5f0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d5a600 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d5a610 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d5a620 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d5a630 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d5a640 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d5a650 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d5a660 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d5a670 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d5a680 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d5a690 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d5a6a0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d5a6b0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d5a6c0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d5a6d0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d5a6e0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d5a6f0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d5a700 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d5a710 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d5a720 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d5a730 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d5a740 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5a750 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d5a760 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d5a770 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d5a780 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d5a790 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d5a7a0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d5a7b0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d5a7c0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d5a7d0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d5a7e0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d5a7f0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d5a800 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d5a810 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d5a820 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d5a830 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d5a840 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d5a850 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d5a860 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d5a870 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d5a880 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d5a890 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d5a8a0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d5a8b0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d5a8c0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d5a8d0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d5a8e0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d5a8f0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d5a900 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d5a910 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d5a920 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d5a930 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d5a940 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d5a950 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d5a960 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d5a970 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d5a980 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d5a990 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d5a9a0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d5a9b0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d5a9c0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d5a9d0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d5a9e0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d5a9f0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d5aa00 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d5aa10 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d5aa20 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d5aa30 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d5aa40 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d5aa50 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d5aa60 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d5aa70 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d5aa80 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d5aa90 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d5aaa0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d5aab0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d5aac0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d5aad0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d5aae0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d5aaf0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d5ab00 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d5ab10 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d5ab20 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d5ab30 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d5ab40 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d5ab50 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d5ab60 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d5ab70 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d5ab80 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d5ab90 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d5aba0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d5abb0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d5abc0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d5abd0 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d5abe0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d5abf0 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00d5ac00 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d5ac10 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d5ac20 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00d5ac30 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d5ac40 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00d5ac50 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d5ac60 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00d5ac70 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d5ac80 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d5ac90 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00d5aca0 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00d5acb0 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00d5acc0 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00d5acd0 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00d5ace0 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00d5acf0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00d5ad00 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ + 0x00d5ad10 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ + 0x00d5ad20 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ + 0x00d5ad30 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d5ad40 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00d5ad50 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00d5ad60 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d5ad70 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d5ad80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5ad90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5ada0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5adb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5adc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5add0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5ade0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5adf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5ae00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5ae10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5ae20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5ae30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5ae40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5ae50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5ae60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5ae70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5ae80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5ae90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5aea0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5aeb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5aec0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5aed0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5aee0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d5aef0 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ + 0x00d5af00 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ + 0x00d5af10 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d5af20 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ + 0x00d5af30 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ + 0x00d5af40 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d5af50 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d5af60 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d5af70 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d5af80 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d5af90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d5afa0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d5afb0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d5afc0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d5afd0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d5afe0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d5aff0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d5b000 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d5b010 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d5b020 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d5b030 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d5b040 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5b050 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d5b060 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d5b070 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d5b080 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d5b090 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ + 0x00d5b0a0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d5b0b0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d5b0c0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d5b0d0 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ + 0x00d5b0e0 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ + 0x00d5b0f0 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ + 0x00d5b100 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ + 0x00d5b110 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d5b120 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d5b130 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d5b140 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d5b150 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d5b160 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d5b170 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d5b180 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d5b190 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d5b1a0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d5b1b0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d5b1c0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d5b1d0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d5b1e0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d5b1f0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d5b200 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d5b210 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d5b220 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d5b230 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d5b240 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5b250 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d5b260 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d5b270 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5b280 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d5b290 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d5b2a0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d5b2b0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d5b2c0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d5b2d0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d5b2e0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d5b2f0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d5b300 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d5b310 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d5b320 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d5b330 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d5b340 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d5b350 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d5b360 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d5b370 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d5b380 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d5b390 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d5b3a0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d5b3b0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d5b3c0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d5b3d0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d5b3e0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d5b3f0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d5b400 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d5b410 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d5b420 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d5b430 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d5b440 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d5b450 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d5b460 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d5b470 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d5b480 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d5b490 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d5b4a0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d5b4b0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d5b4c0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d5b4d0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d5b4e0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d5b4f0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d5b500 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d5b510 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d5b520 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d5b530 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d5b540 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d5b550 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d5b560 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d5b570 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d5b580 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d5b590 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d5b5a0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d5b5b0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d5b5c0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d5b5d0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d5b5e0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d5b5f0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d5b600 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d5b610 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d5b620 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d5b630 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d5b640 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d5b650 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d5b660 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d5b670 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d5b680 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d5b690 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d5b6a0 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ + 0x00d5b6b0 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ + 0x00d5b6c0 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ + 0x00d5b6d0 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ + 0x00d5b6e0 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ + 0x00d5b6f0 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ + 0x00d5b700 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ + 0x00d5b710 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ + 0x00d5b720 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ + 0x00d5b730 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ + 0x00d5b740 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ + 0x00d5b750 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ + 0x00d5b760 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ + 0x00d5b770 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ + 0x00d5b780 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ + 0x00d5b790 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00d5b7a0 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ + 0x00d5b7b0 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ + 0x00d5b7c0 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00d5b7d0 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00d5b7e0 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00d5b7f0 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00d5b800 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d5b810 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00d5b820 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00d5b830 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00d5b840 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ + 0x00d5b850 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ + 0x00d5b860 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ + 0x00d5b870 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ + 0x00d5b880 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ + 0x00d5b890 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ + 0x00d5b8a0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00d5b8b0 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ + 0x00d5b8c0 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ + 0x00d5b8d0 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ + 0x00d5b8e0 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ + 0x00d5b8f0 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ + 0x00d5b900 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d5b910 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00d5b920 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00d5b930 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d5b940 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d5b950 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5b960 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5b970 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5b980 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5b990 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5b9a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5b9b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5b9c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5b9d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5b9e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5b9f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5ba00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5ba10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5ba20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5ba30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5ba40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5ba50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5ba60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5ba70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5ba80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5ba90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5baa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5bab0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5bac0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d5bad0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00d5bae0 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00d5baf0 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00d5bb00 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d5bb10 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00d5bb20 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d5bb30 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00d5bb40 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d5bb50 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d5bb60 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d5bb70 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d5bb80 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d5bb90 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d5bba0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d5bbb0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d5bbc0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d5bbd0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d5bbe0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d5bbf0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5bc00 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d5bc10 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d5bc20 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d5bc30 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00d5bc40 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00d5bc50 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d5bc60 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00d5bc70 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00d5bc80 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d5bc90 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d5bca0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d5bcb0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d5bcc0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d5bcd0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d5bce0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d5bcf0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d5bd00 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d5bd10 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d5bd20 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d5bd30 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d5bd40 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5bd50 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d5bd60 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d5bd70 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5bd80 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d5bd90 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d5bda0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d5bdb0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d5bdc0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d5bdd0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d5bde0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d5bdf0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d5be00 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d5be10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5be20 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d5be30 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d5be40 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d5be50 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d5be60 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d5be70 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d5be80 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d5be90 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d5bea0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d5beb0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d5bec0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d5bed0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d5bee0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d5bef0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d5bf00 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d5bf10 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d5bf20 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5bf30 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d5bf40 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d5bf50 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d5bf60 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d5bf70 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d5bf80 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d5bf90 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d5bfa0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d5bfb0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d5bfc0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d5bfd0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d5bfe0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d5bff0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d5c000 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d5c010 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d5c020 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d5c030 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d5c040 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d5c050 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d5c060 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d5c070 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d5c080 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d5c090 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d5c0a0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d5c0b0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d5c0c0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d5c0d0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d5c0e0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d5c0f0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d5c100 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d5c110 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d5c120 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d5c130 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d5c140 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d5c150 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d5c160 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d5c170 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d5c180 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d5c190 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d5c1a0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d5c1b0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d5c1c0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d5c1d0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d5c1e0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d5c1f0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d5c200 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d5c210 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d5c220 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d5c230 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00d5c240 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ + 0x00d5c250 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ + 0x00d5c260 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ + 0x00d5c270 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ + 0x00d5c280 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00d5c290 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ + 0x00d5c2a0 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ + 0x00d5c2b0 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ + 0x00d5c2c0 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ + 0x00d5c2d0 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ + 0x00d5c2e0 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ + 0x00d5c2f0 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ + 0x00d5c300 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ + 0x00d5c310 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ + 0x00d5c320 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ + 0x00d5c330 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ + 0x00d5c340 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d5c350 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00d5c360 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d5c370 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00d5c380 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00d5c390 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00d5c3a0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d5c3b0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d5c3c0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00d5c3d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5c3e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5c3f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5c400 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5c410 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5c420 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5c430 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5c440 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5c450 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5c460 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5c470 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5c480 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5c490 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5c4a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5c4b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5c4c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5c4d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5c4e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5c4f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5c500 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5c510 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5c520 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5c530 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5c540 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d5c550 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ + 0x00d5c560 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00d5c570 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ + 0x00d5c580 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d5c590 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d5c5a0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d5c5b0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d5c5c0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d5c5d0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d5c5e0 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ + 0x00d5c5f0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d5c600 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ + 0x00d5c610 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d5c620 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ + 0x00d5c630 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ + 0x00d5c640 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ + 0x00d5c650 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ + 0x00d5c660 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ + 0x00d5c670 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ + 0x00d5c680 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d5c690 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00d5c6a0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d5c6b0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d5c6c0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d5c6d0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d5c6e0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d5c6f0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d5c700 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d5c710 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d5c720 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d5c730 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d5c740 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d5c750 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d5c760 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d5c770 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d5c780 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d5c790 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d5c7a0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d5c7b0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d5c7c0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d5c7d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5c7e0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d5c7f0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d5c800 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5c810 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d5c820 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d5c830 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d5c840 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d5c850 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d5c860 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d5c870 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d5c880 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d5c890 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d5c8a0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d5c8b0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d5c8c0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d5c8d0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d5c8e0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d5c8f0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d5c900 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d5c910 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d5c920 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d5c930 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d5c940 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d5c950 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d5c960 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d5c970 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d5c980 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d5c990 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d5c9a0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d5c9b0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d5c9c0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d5c9d0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d5c9e0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d5c9f0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d5ca00 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d5ca10 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d5ca20 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d5ca30 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d5ca40 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d5ca50 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d5ca60 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d5ca70 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d5ca80 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d5ca90 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d5caa0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d5cab0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d5cac0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d5cad0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d5cae0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d5caf0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d5cb00 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d5cb10 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d5cb20 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d5cb30 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d5cb40 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d5cb50 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d5cb60 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d5cb70 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d5cb80 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d5cb90 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d5cba0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d5cbb0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d5cbc0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d5cbd0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d5cbe0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d5cbf0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d5cc00 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d5cc10 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d5cc20 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d5cc30 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00d5cc40 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00d5cc50 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00d5cc60 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d5cc70 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00d5cc80 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ + 0x00d5cc90 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d5cca0 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ + 0x00d5ccb0 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ + 0x00d5ccc0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d5ccd0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d5cce0 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00d5ccf0 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ + 0x00d5cd00 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00d5cd10 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00d5cd20 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d5cd30 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ + 0x00d5cd40 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5cd50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5cd60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5cd70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5cd80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5cd90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5cda0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5cdb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5cdc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5cdd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5cde0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5cdf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5ce00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5ce10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5ce20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5ce30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5ce40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5ce50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5ce60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5ce70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5ce80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5ce90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5cea0 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00d5ceb0 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00d5cec0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d5ced0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d5cee0 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00d5cef0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d5cf00 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00d5cf10 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d5cf20 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d5cf30 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d5cf40 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00d5cf50 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00d5cf60 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d5cf70 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d5cf80 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d5cf90 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ + 0x00d5cfa0 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ + 0x00d5cfb0 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ + 0x00d5cfc0 6f722e61 202a2076 5f696e74 656e7369 or.a * v_intensi │ │ │ │ + 0x00d5cfd0 7479293b 200a2020 7d200a00 00000000 ty); . } ...... │ │ │ │ + 0x00d5cfe0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5cff0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5d000 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5d010 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5d020 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5d030 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5d040 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5d050 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5d060 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5d070 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5d080 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5d090 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5d0a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5d0b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5d0c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5d0d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5d0e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5d0f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5d100 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5d110 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5d120 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5d130 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d5d140 72643b20 0a202069 6e207665 63332076 rd; . in vec3 v │ │ │ │ + 0x00d5d150 5f726164 6975733b 200a2020 6f757420 _radius; . out │ │ │ │ + 0x00d5d160 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00d5d170 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d5d180 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d5d190 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d5d1a0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d5d1b0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d5d1c0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d5d1d0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d5d1e0 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00d5d1f0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d5d200 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d5d210 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d5d220 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00d5d230 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d5d240 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00d5d250 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d5d260 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00d5d270 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d5d280 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d5d290 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d5d2a0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d5d2b0 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00d5d2c0 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00d5d2d0 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00d5d2e0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d5d2f0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d5d300 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ + 0x00d5d310 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d5d320 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ + 0x00d5d330 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ + 0x00d5d340 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d5d350 293b200a 20202020 666c6f61 7420736d ); . float sm │ │ │ │ + 0x00d5d360 616c6c52 61646975 73203d20 765f7261 allRadius = v_ra │ │ │ │ + 0x00d5d370 64697573 2e7a202a 206b416e 7469616c dius.z * kAntial │ │ │ │ + 0x00d5d380 69617369 6e675468 72657368 6f6c643b iasingThreshold; │ │ │ │ + 0x00d5d390 200a2020 2020666c 6f617420 73746570 . float step │ │ │ │ + 0x00d5d3a0 56616c75 65203d20 736d6f6f 74687374 Value = smoothst │ │ │ │ + 0x00d5d3b0 65702873 6d616c6c 52616469 7573202a ep(smallRadius * │ │ │ │ + 0x00d5d3c0 20736d61 6c6c5261 64697573 2c20765f smallRadius, v_ │ │ │ │ + 0x00d5d3d0 72616469 75732e7a 202a2076 5f726164 radius.z * v_rad │ │ │ │ + 0x00d5d3e0 6975732e 7a2c200a 20202020 20202020 ius.z, . │ │ │ │ + 0x00d5d3f0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d5d400 20202020 20202020 20765f72 61646975 v_radiu │ │ │ │ + 0x00d5d410 732e7820 2a20765f 72616469 75732e78 s.x * v_radius.x │ │ │ │ + 0x00d5d420 202b2076 5f726164 6975732e 79202a20 + v_radius.y * │ │ │ │ + 0x00d5d430 765f7261 64697573 2e79293b 200a2020 v_radius.y); . │ │ │ │ + 0x00d5d440 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ + 0x00d5d450 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ + 0x00d5d460 74657056 616c7565 293b200a 20202020 tepValue); . │ │ │ │ + 0x00d5d470 69662028 636f6c6f 722e6120 3c20302e if (color.a < 0. │ │ │ │ + 0x00d5d480 30312920 0a202020 20202064 69736361 01) . disca │ │ │ │ + 0x00d5d490 72643b20 0a202020 20765f46 72616743 rd; . v_FragC │ │ │ │ + 0x00d5d4a0 6f6c6f72 203d2063 6f6c6f72 3b200a20 olor = color; . │ │ │ │ + 0x00d5d4b0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d5d4c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5d4d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5d4e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5d4f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5d500 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5d510 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5d520 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5d530 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5d540 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5d550 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5d560 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5d570 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5d580 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5d590 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5d5a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5d5b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5d5c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5d5d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5d5e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5d5f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5d600 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5d610 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d5d620 7264733b 200a2020 696e2066 6c6f6174 rds; . in float │ │ │ │ + 0x00d5d630 20765f69 6e74656e 73697479 3b200a20 v_intensity; . │ │ │ │ + 0x00d5d640 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00d5d650 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d5d660 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d5d670 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d5d680 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d5d690 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d5d6a0 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d5d6b0 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d5d6c0 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d5d6d0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d5d6e0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d5d6f0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d5d700 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d5d710 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d5d720 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d5d730 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d5d740 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d5d750 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d5d760 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d5d770 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d5d780 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d5d790 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d5d7a0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d5d7b0 0a202020 20766563 34206669 6e616c43 . vec4 finalC │ │ │ │ + 0x00d5d7c0 6f6c6f72 203d2076 65633428 74657874 olor = vec4(text │ │ │ │ + 0x00d5d7d0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d5d7e0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d5d7f0 292e7267 622c2075 5f6f7061 63697479 ).rgb, u_opacity │ │ │ │ + 0x00d5d800 293b200a 20202020 765f4672 6167436f ); . v_FragCo │ │ │ │ + 0x00d5d810 6c6f7220 3d207665 63342828 765f696e lor = vec4((v_in │ │ │ │ + 0x00d5d820 74656e73 69747920 2a20302e 32202b20 tensity * 0.2 + │ │ │ │ + 0x00d5d830 302e3829 202a2066 696e616c 436f6c6f 0.8) * finalColo │ │ │ │ + 0x00d5d840 722e7267 622c2066 696e616c 436f6c6f r.rgb, finalColo │ │ │ │ + 0x00d5d850 722e6129 3b200a20 207d200a 00000000 r.a); . } ..... │ │ │ │ + 0x00d5d860 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5d870 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5d880 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5d890 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5d8a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5d8b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5d8c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5d8d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5d8e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5d8f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5d900 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5d910 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5d920 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5d930 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5d940 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5d950 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5d960 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5d970 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5d980 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5d990 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5d9a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5d9b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5d9c0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d5d9d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d5d9e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d5d9f0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d5da00 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d5da10 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ + 0x00d5da20 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ + 0x00d5da30 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ + 0x00d5da40 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ + 0x00d5da50 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ + 0x00d5da60 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ + 0x00d5da70 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ + 0x00d5da80 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d5da90 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00d5daa0 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00d5dab0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d5dac0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d5dad0 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ + 0x00d5dae0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d5daf0 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ + 0x00d5db00 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d5db10 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ + 0x00d5db20 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ + 0x00d5db30 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ + 0x00d5db40 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ + 0x00d5db50 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ + 0x00d5db60 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ + 0x00d5db70 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d5db80 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d5db90 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d5dba0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d5dbb0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d5dbc0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d5dbd0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d5dbe0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d5dbf0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d5dc00 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d5dc10 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d5dc20 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d5dc30 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5dc40 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d5dc50 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d5dc60 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5dc70 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d5dc80 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d5dc90 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d5dca0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d5dcb0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d5dcc0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d5dcd0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d5dce0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d5dcf0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d5dd00 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5dd10 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d5dd20 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d5dd30 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d5dd40 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d5dd50 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d5dd60 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d5dd70 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d5dd80 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d5dd90 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d5dda0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d5ddb0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d5ddc0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d5ddd0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d5dde0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d5ddf0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d5de00 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d5de10 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5de20 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d5de30 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d5de40 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d5de50 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d5de60 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d5de70 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d5de80 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d5de90 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d5dea0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d5deb0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d5dec0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d5ded0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d5dee0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d5def0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d5df00 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d5df10 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d5df20 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d5df30 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d5df40 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d5df50 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d5df60 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d5df70 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d5df80 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d5df90 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d5dfa0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d5dfb0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d5dfc0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d5dfd0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d5dfe0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d5dff0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d5e000 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d5e010 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d5e020 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d5e030 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d5e040 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d5e050 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d5e060 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d5e070 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d5e080 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d5e090 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d5e0a0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d5e0b0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d5e0c0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d5e0d0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d5e0e0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d5e0f0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d5e100 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d5e110 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d5e120 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00d5e130 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ + 0x00d5e140 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ + 0x00d5e150 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ + 0x00d5e160 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ + 0x00d5e170 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00d5e180 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ + 0x00d5e190 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ + 0x00d5e1a0 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ + 0x00d5e1b0 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ + 0x00d5e1c0 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ + 0x00d5e1d0 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ + 0x00d5e1e0 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ + 0x00d5e1f0 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ + 0x00d5e200 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ + 0x00d5e210 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ + 0x00d5e220 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ + 0x00d5e230 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ + 0x00d5e240 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d5e250 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ + 0x00d5e260 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ + 0x00d5e270 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ + 0x00d5e280 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ + 0x00d5e290 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ + 0x00d5e2a0 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ + 0x00d5e2b0 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ + 0x00d5e2c0 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ + 0x00d5e2d0 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ + 0x00d5e2e0 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ + 0x00d5e2f0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d5e300 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ + 0x00d5e310 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ + 0x00d5e320 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ + 0x00d5e330 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d5e340 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ + 0x00d5e350 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ + 0x00d5e360 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ + 0x00d5e370 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ + 0x00d5e380 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ + 0x00d5e390 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ + 0x00d5e3a0 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ + 0x00d5e3b0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d5e3c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5e3d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5e3e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5e3f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5e400 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5e410 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5e420 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5e430 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5e440 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5e450 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5e460 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5e470 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5e480 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5e490 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5e4a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5e4b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5e4c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5e4d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5e4e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5e4f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5e500 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5e510 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d5e520 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d5e530 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d5e540 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d5e550 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d5e560 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d5e570 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d5e580 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d5e590 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d5e5a0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d5e5b0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d5e5c0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d5e5d0 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ + 0x00d5e5e0 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d5e5f0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d5e600 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ + 0x00d5e610 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d5e620 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00d5e630 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ + 0x00d5e640 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d5e650 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d5e660 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00d5e670 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00d5e680 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d5e690 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d5e6a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d5e6b0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00d5e6c0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d5e6d0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d5e6e0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00d5e6f0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d5e700 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00d5e710 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00d5e720 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00d5e730 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00d5e740 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00d5e750 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00d5e760 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d5e770 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00d5e780 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d5e790 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00d5e7a0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00d5e7b0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00d5e7c0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00d5e7d0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00d5e7e0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00d5e7f0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d5e800 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00d5e810 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00d5e820 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d5e830 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00d5e840 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00d5e850 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00d5e860 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00d5e870 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d5e880 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d5e890 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d5e8a0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00d5e8b0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00d5e8c0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00d5e8d0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00d5e8e0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d5e8f0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d5e900 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d5e910 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00d5e920 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00d5e930 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00d5e940 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00d5e950 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00d5e960 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00d5e970 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d5e980 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00d5e990 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00d5e9a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5e9b0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00d5e9c0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00d5e9d0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00d5e9e0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00d5e9f0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d5ea00 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00d5ea10 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00d5ea20 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00d5ea30 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00d5ea40 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00d5ea50 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d5ea60 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00d5ea70 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00d5ea80 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d5ea90 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00d5eaa0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d5eab0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00d5eac0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00d5ead0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00d5eae0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00d5eaf0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00d5eb00 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00d5eb10 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00d5eb20 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00d5eb30 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00d5eb40 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00d5eb50 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00d5eb60 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00d5eb70 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00d5eb80 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00d5eb90 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00d5eba0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00d5ebb0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d5ebc0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00d5ebd0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00d5ebe0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d5ebf0 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00d5ec00 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ + 0x00d5ec10 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ + 0x00d5ec20 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ + 0x00d5ec30 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ + 0x00d5ec40 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d5ec50 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00d5ec60 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00d5ec70 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d5ec80 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00d5ec90 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ + 0x00d5eca0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00d5ecb0 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ + 0x00d5ecc0 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ + 0x00d5ecd0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d5ece0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d5ecf0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5ed00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5ed10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5ed20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5ed30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5ed40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5ed50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5ed60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5ed70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5ed80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5ed90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5eda0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5edb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5edc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5edd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5ede0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5edf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5ee00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5ee10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5ee20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5ee30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5ee40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5ee50 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d5ee60 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d5ee70 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d5ee80 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d5ee90 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d5eea0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d5eeb0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d5eec0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d5eed0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d5eee0 69666f72 6d207665 63322075 5f636f6e iform vec2 u_con │ │ │ │ + 0x00d5eef0 74726173 7447616d 6d613b20 0a202075 trastGamma; . u │ │ │ │ + 0x00d5ef00 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00d5ef10 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00d5ef20 726d2066 6c6f6174 20755f7a 5363616c rm float u_zScal │ │ │ │ + 0x00d5ef30 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00d5ef40 6f617420 755f696e 74657270 6f6c6174 oat u_interpolat │ │ │ │ + 0x00d5ef50 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d5ef60 666c6f61 7420755f 69734f75 746c696e float u_isOutlin │ │ │ │ + 0x00d5ef70 65506173 733b200a 2020756e 69666f72 ePass; . unifor │ │ │ │ + 0x00d5ef80 6d207361 6d706c65 72324420 755f636f m sampler2D u_co │ │ │ │ + 0x00d5ef90 6c6f7254 65783b20 0a202063 6f6e7374 lorTex; . const │ │ │ │ + 0x00d5efa0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d5efb0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d5efc0 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ + 0x00d5efd0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d5efe0 2066696e 616c436f 6c6f7220 3d207465 finalColor = te │ │ │ │ + 0x00d5eff0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d5f000 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ + 0x00d5f010 6473293b 200a2020 20206669 6e616c43 ds); . finalC │ │ │ │ + 0x00d5f020 6f6c6f72 2e61202a 3d20755f 6f706163 olor.a *= u_opac │ │ │ │ + 0x00d5f030 6974793b 200a2020 2020765f 46726167 ity; . v_Frag │ │ │ │ + 0x00d5f040 436f6c6f 72203d20 66696e61 6c436f6c Color = finalCol │ │ │ │ + 0x00d5f050 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d5f060 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5f070 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5f080 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5f090 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5f0a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5f0b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5f0c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5f0d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5f0e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5f0f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5f100 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5f110 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5f120 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5f130 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5f140 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5f150 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5f160 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5f170 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5f180 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5f190 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5f1a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5f1b0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d5f1c0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d5f1d0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d5f1e0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d5f1f0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d5f200 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d5f210 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d5f220 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d5f230 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d5f240 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d5f250 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d5f260 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d5f270 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d5f280 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d5f290 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d5f2a0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d5f2b0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d5f2c0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d5f2d0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d5f2e0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d5f2f0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d5f300 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d5f310 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d5f320 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d5f330 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d5f340 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d5f350 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d5f360 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d5f370 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5f380 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d5f390 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d5f3a0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d5f3b0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d5f3c0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d5f3d0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d5f3e0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d5f3f0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d5f400 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d5f410 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d5f420 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d5f430 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d5f440 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d5f450 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d5f460 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d5f470 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d5f480 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d5f490 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d5f4a0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d5f4b0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d5f4c0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d5f4d0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d5f4e0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d5f4f0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d5f500 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d5f510 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d5f520 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d5f530 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d5f540 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d5f550 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d5f560 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d5f570 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d5f580 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d5f590 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d5f5a0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d5f5b0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d5f5c0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d5f5d0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d5f5e0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d5f5f0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d5f600 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d5f610 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d5f620 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d5f630 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d5f640 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d5f650 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d5f660 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d5f670 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d5f680 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d5f690 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d5f6a0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d5f6b0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d5f6c0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d5f6d0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d5f6e0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d5f6f0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d5f700 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d5f710 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d5f720 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d5f730 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d5f740 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d5f750 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d5f760 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d5f770 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00d5f780 20302c20 31293b20 0a202023 69666465 0, 1); . #ifde │ │ │ │ + 0x00d5f790 66205655 4c4b414e 200a2020 2020676c f VULKAN . gl │ │ │ │ + 0x00d5f7a0 5f506f73 6974696f 6e2e7920 3d202d67 _Position.y = -g │ │ │ │ + 0x00d5f7b0 6c5f506f 73697469 6f6e2e79 3b200a20 l_Position.y; . │ │ │ │ + 0x00d5f7c0 20202067 6c5f506f 73697469 6f6e2e7a gl_Position.z │ │ │ │ + 0x00d5f7d0 203d2028 676c5f50 6f736974 696f6e2e = (gl_Position. │ │ │ │ + 0x00d5f7e0 7a20202b 20676c5f 506f7369 74696f6e z + gl_Position │ │ │ │ + 0x00d5f7f0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00d5f800 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00d5f810 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d5f820 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d5f830 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d5f840 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d5f850 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d5f860 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d5f870 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d5f880 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d5f890 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d5f8a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d5f8b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d5f8c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d5f8d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d5f8e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d5f8f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d5f900 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d5f910 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d5f920 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d5f930 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d5f940 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d5f950 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d5f960 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d5f970 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d5f980 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d5f990 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d5f9a0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d5f9b0 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00d5f9c0 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00d5f9d0 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00d5f9e0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00d5f9f0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d5fa00 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d5fa10 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d5fa20 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d5fa30 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d5fa40 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d5fa50 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d5fa60 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d5fa70 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d5fa80 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d5fa90 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d5faa0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d5fab0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d5fac0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d5fad0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d5fae0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d5faf0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d5fb00 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d5fb10 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d5fb20 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d5fb30 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d5fb40 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d5fb50 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d5fb60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d5fb70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d5fb80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d5fb90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d5fba0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d5fbb0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d5fbc0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d5fbd0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d5fbe0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d5fbf0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d5fc00 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d5fc10 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d5fc20 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d5fc30 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d5fc40 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d5fc50 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d5fc60 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d5fc70 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d5fc80 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d5fc90 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d5fca0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d5fcb0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d5fcc0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d5fcd0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d5fce0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d5fcf0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d5fd00 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d5fd10 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d5fd20 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d5fd30 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d5fd40 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d5fd50 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d5fd60 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d5fd70 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d5fd80 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d5fd90 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d5fda0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d5fdb0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d5fdc0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d5fdd0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d5fde0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d5fdf0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d5fe00 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d5fe10 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d5fe20 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d5fe30 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d5fe40 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d5fe50 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d5fe60 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d5fe70 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d5fe80 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d5fe90 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d5fea0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d5feb0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d5fec0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d5fed0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d5fee0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d5fef0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d5ff00 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d5ff10 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d5ff20 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d5ff30 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d5ff40 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d5ff50 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d5ff60 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d5ff70 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d5ff80 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d5ff90 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d5ffa0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d5ffb0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d5ffc0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d5ffd0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d5ffe0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d5fff0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d60000 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d60010 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d60020 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d60030 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d60040 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d60050 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d60060 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d60070 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d60080 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d60090 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d600a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d600b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d600c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d600d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d600e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d600f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d60100 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d60110 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d60120 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d60130 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d60140 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d60150 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ + 0x00d60160 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d60170 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ + 0x00d60180 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d60190 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d601a0 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ + 0x00d601b0 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ + 0x00d601c0 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ + 0x00d601d0 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00d601e0 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ + 0x00d601f0 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ + 0x00d60200 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d60210 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ + 0x00d60220 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d60230 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d60240 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ + 0x00d60250 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ + 0x00d60260 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ + 0x00d60270 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ + 0x00d60280 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ + 0x00d60290 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ + 0x00d602a0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d602b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d602c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d602d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d602e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d602f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d60300 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d60310 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d60320 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d60330 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d60340 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d60350 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d60360 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d60370 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d60380 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d60390 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d603a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d603b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d603c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d603d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d603e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d603f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d60400 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d60410 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d60420 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d60430 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d60440 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d60450 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00d60460 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00d60470 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00d60480 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00d60490 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d604a0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d604b0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d604c0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d604d0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d604e0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d604f0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d60500 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d60510 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d60520 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d60530 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d60540 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d60550 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d60560 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d60570 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d60580 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d60590 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d605a0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d605b0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d605c0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d605d0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d605e0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d605f0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d60600 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d60610 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d60620 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d60630 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d60640 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d60650 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d60660 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d60670 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d60680 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d60690 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d606a0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d606b0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d606c0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d606d0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d606e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d606f0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d60700 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d60710 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d60720 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d60730 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d60740 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d60750 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d60760 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d60770 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d60780 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d60790 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d607a0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d607b0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d607c0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d607d0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d607e0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d607f0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d60800 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d60810 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d60820 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d60830 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d60840 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d60850 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d60860 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d60870 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d60880 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d60890 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d608a0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d608b0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d608c0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d608d0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d608e0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d608f0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d60900 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d60910 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d60920 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d60930 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d60940 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d60950 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d60960 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d60970 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d60980 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d60990 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d609a0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d609b0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d609c0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d609d0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d609e0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d609f0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d60a00 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d60a10 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d60a20 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d60a30 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d60a40 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d60a50 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d60a60 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d60a70 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d60a80 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d60a90 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d60aa0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d60ab0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d60ac0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d60ad0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d60ae0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d60af0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d60b00 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d60b10 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d60b20 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d60b30 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d60b40 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d60b50 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d60b60 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d60b70 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d60b80 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d60b90 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00d60ba0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d60bb0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d60bc0 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00d60bd0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d60be0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00d60bf0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d60c00 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00d60c10 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d60c20 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d60c30 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00d60c40 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00d60c50 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00d60c60 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00d60c70 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00d60c80 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d60c90 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00d60ca0 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00d60cb0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d60cc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d60cd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d60ce0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d60cf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d60d00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d60d10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d60d20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d60d30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d60d40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d60d50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d60d60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d60d70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d60d80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d60d90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d60da0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d60db0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d60dc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d60dd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d60de0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d60df0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d60e00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d60e10 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d60e20 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d60e30 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ + 0x00d60e40 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ + 0x00d60e50 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ + 0x00d60e60 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d60e70 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d60e80 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d60e90 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d60ea0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d60eb0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d60ec0 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d60ed0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d60ee0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d60ef0 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d60f00 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d60f10 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d60f20 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ + 0x00d60f30 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d60f40 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d60f50 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00d60f60 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d60f70 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d60f80 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d60f90 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d60fa0 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00d60fb0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d60fc0 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00d60fd0 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00d60fe0 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00d60ff0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d61000 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00d61010 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d61020 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d61030 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d61040 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00d61050 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d61060 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00d61070 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00d61080 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d61090 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00d610a0 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00d610b0 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00d610c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d610d0 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00d610e0 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00d610f0 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00d61100 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00d61110 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d61120 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00d61130 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00d61140 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00d61150 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d61160 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d61170 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d61180 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d61190 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00d611a0 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00d611b0 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00d611c0 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00d611d0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d611e0 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00d611f0 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00d61200 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d61210 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00d61220 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00d61230 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d61240 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00d61250 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00d61260 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d61270 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d61280 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00d61290 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00d612a0 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00d612b0 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00d612c0 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00d612d0 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00d612e0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d612f0 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00d61300 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d61310 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00d61320 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00d61330 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00d61340 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d61350 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00d61360 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00d61370 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00d61380 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00d61390 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00d613a0 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00d613b0 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00d613c0 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00d613d0 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00d613e0 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00d613f0 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00d61400 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d61410 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00d61420 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d61430 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00d61440 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00d61450 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d61460 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00d61470 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00d61480 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00d61490 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d614a0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d614b0 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00d614c0 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ + 0x00d614d0 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ + 0x00d614e0 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ + 0x00d614f0 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00d61500 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00d61510 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d61520 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ + 0x00d61530 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ + 0x00d61540 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ + 0x00d61550 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ + 0x00d61560 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ + 0x00d61570 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ + 0x00d61580 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ + 0x00d61590 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d615a0 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00d615b0 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ + 0x00d615c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d615d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d615e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d615f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d61600 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d61610 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d61620 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d61630 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d61640 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d61650 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d61660 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d61670 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d61680 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d61690 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d616a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d616b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d616c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d616d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d616e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d616f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d61700 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d61710 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d61720 72643b20 0a20206f 75742076 65633420 rd; . out vec4 │ │ │ │ + 0x00d61730 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d61740 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d61750 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d61760 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d61770 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d61780 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d61790 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d617a0 666f726d 20766563 3420755f 74726166 form vec4 u_traf │ │ │ │ + 0x00d617b0 66696350 6172616d 733b200a 2020756e ficParams; . un │ │ │ │ + 0x00d617c0 69666f72 6d207665 63342075 5f6f7574 iform vec4 u_out │ │ │ │ + 0x00d617d0 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00d617e0 69666f72 6d207665 63342075 5f6c6967 iform vec4 u_lig │ │ │ │ + 0x00d617f0 68744172 726f7743 6f6c6f72 3b200a20 htArrowColor; . │ │ │ │ + 0x00d61800 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d61810 6461726b 4172726f 77436f6c 6f723b20 darkArrowColor; │ │ │ │ + 0x00d61820 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d61830 20755f6f 75746c69 6e653b20 0a202075 u_outline; . u │ │ │ │ + 0x00d61840 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00d61850 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00d61860 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d61870 6f6c6f72 5465783b 200a2020 636f6e73 olorTex; . cons │ │ │ │ + 0x00d61880 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d61890 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d618a0 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ + 0x00d618b0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d618c0 3420636f 6c6f7220 3d207465 78747572 4 color = textur │ │ │ │ + 0x00d618d0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d618e0 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00d618f0 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00d61900 203d2076 65633428 636f6c6f 722e7267 = vec4(color.rg │ │ │ │ + 0x00d61910 622c2075 5f6f7061 63697479 293b200a b, u_opacity); . │ │ │ │ + 0x00d61920 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d61930 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d61940 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d61950 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d61960 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d61970 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d61980 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d61990 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d619a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d619b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d619c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d619d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d619e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d619f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d61a00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d61a10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d61a20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d61a30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d61a40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d61a50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d61a60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d61a70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d61a80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d61a90 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d61aa0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d61ab0 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ + 0x00d61ac0 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ + 0x00d61ad0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d61ae0 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ + 0x00d61af0 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ + 0x00d61b00 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00d61b10 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d61b20 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d61b30 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d61b40 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d61b50 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d61b60 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d61b70 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ + 0x00d61b80 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ + 0x00d61b90 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ + 0x00d61ba0 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ + 0x00d61bb0 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ + 0x00d61bc0 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ + 0x00d61bd0 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ + 0x00d61be0 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ + 0x00d61bf0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d61c00 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ + 0x00d61c10 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00d61c20 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ + 0x00d61c30 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ + 0x00d61c40 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ + 0x00d61c50 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ + 0x00d61c60 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ + 0x00d61c70 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ + 0x00d61c80 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ + 0x00d61c90 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ + 0x00d61ca0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d61cb0 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00d61cc0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d61cd0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d61ce0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d61cf0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d61d00 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d61d10 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d61d20 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d61d30 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d61d40 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d61d50 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d61d60 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d61d70 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d61d80 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d61d90 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d61da0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d61db0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d61dc0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d61dd0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d61de0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d61df0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d61e00 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d61e10 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d61e20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d61e30 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d61e40 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d61e50 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d61e60 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d61e70 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d61e80 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d61e90 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d61ea0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d61eb0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d61ec0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d61ed0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d61ee0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d61ef0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d61f00 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d61f10 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d61f20 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d61f30 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d61f40 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d61f50 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d61f60 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d61f70 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d61f80 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d61f90 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d61fa0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d61fb0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d61fc0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d61fd0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d61fe0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d61ff0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d62000 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d62010 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d62020 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d62030 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d62040 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d62050 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d62060 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d62070 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d62080 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d62090 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d620a0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d620b0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d620c0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d620d0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d620e0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d620f0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d62100 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d62110 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d62120 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d62130 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d62140 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d62150 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d62160 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d62170 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d62180 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d62190 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d621a0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d621b0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d621c0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d621d0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d621e0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d621f0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d62200 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d62210 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d62220 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d62230 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d62240 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d62250 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00d62260 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00d62270 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00d62280 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d62290 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00d622a0 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ + 0x00d622b0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00d622c0 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ + 0x00d622d0 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ + 0x00d622e0 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ + 0x00d622f0 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ + 0x00d62300 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ + 0x00d62310 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ + 0x00d62320 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ + 0x00d62330 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ + 0x00d62340 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ + 0x00d62350 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d62360 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ + 0x00d62370 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ + 0x00d62380 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ + 0x00d62390 0a202020 20202020 20202020 20202020 . │ │ │ │ + 0x00d623a0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d623b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d623c0 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ + 0x00d623d0 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ + 0x00d623e0 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ + 0x00d623f0 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ + 0x00d62400 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ + 0x00d62410 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ + 0x00d62420 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ + 0x00d62430 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ + 0x00d62440 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ + 0x00d62450 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ + 0x00d62460 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ + 0x00d62470 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ + 0x00d62480 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ + 0x00d62490 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d624a0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d624b0 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ + 0x00d624c0 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ + 0x00d624d0 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ + 0x00d624e0 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ + 0x00d624f0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00d62500 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d62510 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ + 0x00d62520 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00d62530 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d62540 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d62550 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d62560 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d62570 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d62580 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d62590 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d625a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d625b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d625c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d625d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d625e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d625f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d62600 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d62610 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d62620 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d62630 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d62640 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d62650 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d62660 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d62670 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d62680 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d62690 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d626a0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d626b0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00d626c0 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00d626d0 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00d626e0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d626f0 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00d62700 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00d62710 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00d62720 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d62730 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d62740 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d62750 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d62760 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d62770 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d62780 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d62790 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d627a0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d627b0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d627c0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d627d0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d627e0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d627f0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d62800 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d62810 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d62820 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d62830 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d62840 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d62850 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d62860 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d62870 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d62880 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d62890 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d628a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d628b0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d628c0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d628d0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d628e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d628f0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d62900 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d62910 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d62920 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d62930 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d62940 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d62950 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d62960 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d62970 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d62980 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d62990 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d629a0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d629b0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d629c0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d629d0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d629e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d629f0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d62a00 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d62a10 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d62a20 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d62a30 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d62a40 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d62a50 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d62a60 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d62a70 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d62a80 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d62a90 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d62aa0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d62ab0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d62ac0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d62ad0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d62ae0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d62af0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d62b00 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d62b10 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d62b20 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d62b30 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d62b40 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d62b50 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d62b60 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d62b70 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d62b80 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d62b90 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d62ba0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d62bb0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d62bc0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d62bd0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d62be0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d62bf0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d62c00 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d62c10 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d62c20 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d62c30 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d62c40 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d62c50 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d62c60 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d62c70 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d62c80 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d62c90 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d62ca0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d62cb0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d62cc0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d62cd0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d62ce0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d62cf0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d62d00 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d62d10 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d62d20 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d62d30 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d62d40 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d62d50 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d62d60 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d62d70 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d62d80 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d62d90 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d62da0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d62db0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d62dc0 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00d62dd0 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00d62de0 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00d62df0 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00d62e00 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00d62e10 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00d62e20 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00d62e30 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00d62e40 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ + 0x00d62e50 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ + 0x00d62e60 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00d62e70 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ + 0x00d62e80 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ + 0x00d62e90 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d62ea0 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ + 0x00d62eb0 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ + 0x00d62ec0 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ + 0x00d62ed0 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ + 0x00d62ee0 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ + 0x00d62ef0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d62f00 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ + 0x00d62f10 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ + 0x00d62f20 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ + 0x00d62f30 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ + 0x00d62f40 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ + 0x00d62f50 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ + 0x00d62f60 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ + 0x00d62f70 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ + 0x00d62f80 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d62f90 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ + 0x00d62fa0 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ + 0x00d62fb0 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ + 0x00d62fc0 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ + 0x00d62fd0 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ + 0x00d62fe0 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ + 0x00d62ff0 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ + 0x00d63000 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ + 0x00d63010 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ + 0x00d63020 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ + 0x00d63030 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d63040 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d63050 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d63060 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d63070 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d63080 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d63090 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d630a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d630b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d630c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d630d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d630e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d630f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d63100 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d63110 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d63120 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d63130 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d63140 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d63150 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d63160 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d63170 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d63180 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d63190 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d631a0 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00d631b0 765f6f66 66736574 3b200a20 206f7574 v_offset; . out │ │ │ │ + 0x00d631c0 20766563 3420765f 46726167 436f6c6f vec4 v_FragColo │ │ │ │ + 0x00d631d0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d631e0 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00d631f0 4d657472 6963733b 200a2020 756e6966 Metrics; . unif │ │ │ │ + 0x00d63200 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d63210 636f6c6f 72546578 3b200a20 20756e69 colorTex; . uni │ │ │ │ + 0x00d63220 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d63230 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ + 0x00d63240 65783b20 0a202023 64656669 6e652053 ex; . #define S │ │ │ │ + 0x00d63250 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00d63260 726f2874 65782c20 636f6f72 64292074 ro(tex, coord) t │ │ │ │ + 0x00d63270 65787475 72654c6f 64287465 782c2063 extureLod(tex, c │ │ │ │ + 0x00d63280 6f6f7264 2c20302e 3029200a 2020636f oord, 0.0) . co │ │ │ │ + 0x00d63290 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d632a0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d632b0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d632c0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d632d0 65633420 613b200a 20202020 612e7820 ec4 a; . a.x │ │ │ │ + 0x00d632e0 3d207465 78747572 6528755f 626c656e = texture(u_blen │ │ │ │ + 0x00d632f0 64696e67 57656967 68745465 782c2076 dingWeightTex, v │ │ │ │ + 0x00d63300 5f6f6666 7365742e 7879292e 613b202f _offset.xy).a; / │ │ │ │ + 0x00d63310 2f205269 67687420 0a202020 20612e79 / Right . a.y │ │ │ │ + 0x00d63320 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ + 0x00d63330 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ + 0x00d63340 765f6f66 66736574 2e7a7729 2e673b20 v_offset.zw).g; │ │ │ │ + 0x00d63350 2f2f2054 6f70200a 20202020 612e777a // Top . a.wz │ │ │ │ + 0x00d63360 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ + 0x00d63370 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ + 0x00d63380 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d63390 292e787a 3b202f2f 20426f74 746f6d20 ).xz; // Bottom │ │ │ │ + 0x00d633a0 2f204c65 6674200a 20202020 69662028 / Left . if ( │ │ │ │ + 0x00d633b0 646f7428 612c2076 65633428 312e302c dot(a, vec4(1.0, │ │ │ │ + 0x00d633c0 20312e30 2c20312e 302c2031 2e302929 1.0, 1.0, 1.0)) │ │ │ │ + 0x00d633d0 203c2031 652d3529 200a2020 20207b20 < 1e-5) . { │ │ │ │ + 0x00d633e0 0a202020 20202076 5f467261 67436f6c . v_FragCol │ │ │ │ + 0x00d633f0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d63400 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ + 0x00d63410 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ + 0x00d63420 207d200a 20202020 656c7365 200a2020 } . else . │ │ │ │ + 0x00d63430 20207b20 0a202020 20202076 65633420 { . vec4 │ │ │ │ + 0x00d63440 626c656e 64696e67 4f666673 6574203d blendingOffset = │ │ │ │ + 0x00d63450 20766563 3428302e 302c2061 2e792c20 vec4(0.0, a.y, │ │ │ │ + 0x00d63460 302e302c 20612e77 293b200a 20202020 0.0, a.w); . │ │ │ │ + 0x00d63470 20207665 63322062 6c656e64 696e6757 vec2 blendingW │ │ │ │ + 0x00d63480 65696768 74203d20 612e7977 3b200a20 eight = a.yw; . │ │ │ │ + 0x00d63490 20202020 20696620 286d6178 28612e78 if (max(a.x │ │ │ │ + 0x00d634a0 2c20612e 7a29203e 206d6178 28612e79 , a.z) > max(a.y │ │ │ │ + 0x00d634b0 2c20612e 77292920 0a202020 2020207b , a.w)) . { │ │ │ │ + 0x00d634c0 200a2020 20202020 2020626c 656e6469 . blendi │ │ │ │ + 0x00d634d0 6e674f66 66736574 203d2076 65633428 ngOffset = vec4( │ │ │ │ + 0x00d634e0 612e782c 20302e30 2c20612e 7a2c2030 a.x, 0.0, a.z, 0 │ │ │ │ + 0x00d634f0 2e30293b 200a2020 20202020 2020626c .0); . bl │ │ │ │ + 0x00d63500 656e6469 6e675765 69676874 203d2061 endingWeight = a │ │ │ │ + 0x00d63510 2e787a3b 200a2020 20202020 7d200a20 .xz; . } . │ │ │ │ + 0x00d63520 20202020 20626c65 6e64696e 67576569 blendingWei │ │ │ │ + 0x00d63530 67687420 2f3d2064 6f742862 6c656e64 ght /= dot(blend │ │ │ │ + 0x00d63540 696e6757 65696768 742c2076 65633228 ingWeight, vec2( │ │ │ │ + 0x00d63550 312e302c 20312e30 29293b20 0a202020 1.0, 1.0)); . │ │ │ │ + 0x00d63560 20202076 65633420 6263203d 20626c65 vec4 bc = ble │ │ │ │ + 0x00d63570 6e64696e 674f6666 73657420 2a207665 ndingOffset * ve │ │ │ │ + 0x00d63580 63342875 5f667261 6d656275 66666572 c4(u_framebuffer │ │ │ │ + 0x00d63590 4d657472 6963732e 78792c20 2d755f66 Metrics.xy, -u_f │ │ │ │ + 0x00d635a0 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00d635b0 732e7879 293b200a 20202020 20206263 s.xy); . bc │ │ │ │ + 0x00d635c0 202b3d20 765f636f 6c6f7254 6578436f += v_colorTexCo │ │ │ │ + 0x00d635d0 6f726473 2e787978 793b200a 20202020 ords.xyxy; . │ │ │ │ + 0x00d635e0 20207665 63342063 6f6c6f72 203d2062 vec4 color = b │ │ │ │ + 0x00d635f0 6c656e64 696e6757 65696768 742e7820 lendingWeight.x │ │ │ │ + 0x00d63600 2a20534d 41415361 6d706c65 4c657665 * SMAASampleLeve │ │ │ │ + 0x00d63610 6c5a6572 6f28755f 636f6c6f 72546578 lZero(u_colorTex │ │ │ │ + 0x00d63620 2c206263 2e787929 3b200a20 20202020 , bc.xy); . │ │ │ │ + 0x00d63630 20636f6c 6f72202b 3d20626c 656e6469 color += blendi │ │ │ │ + 0x00d63640 6e675765 69676874 2e79202a 20534d41 ngWeight.y * SMA │ │ │ │ + 0x00d63650 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00d63660 28755f63 6f6c6f72 5465782c 2062632e (u_colorTex, bc. │ │ │ │ + 0x00d63670 7a77293b 200a2020 20202020 765f4672 zw); . v_Fr │ │ │ │ + 0x00d63680 6167436f 6c6f7220 3d20636f 6c6f723b agColor = color; │ │ │ │ + 0x00d63690 200a2020 20207d20 0a20207d 200a0000 . } . } ... │ │ │ │ + 0x00d636a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d636b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d636c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d636d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d636e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d636f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d63700 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d63710 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d63720 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d63730 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d63740 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d63750 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d63760 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d63770 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d63780 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d63790 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d637a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d637b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d637c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d637d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d637e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d637f0 63342076 5f6e6f72 6d616c3b 200a2020 c4 v_normal; . │ │ │ │ + 0x00d63800 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00d63810 46200a20 20696e20 4c4f575f 50207665 F . in LOW_P ve │ │ │ │ + 0x00d63820 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d63830 656c7365 200a2020 696e2076 65633220 else . in vec2 │ │ │ │ + 0x00d63840 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d63850 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00d63860 706c6572 32442075 5f636f6c 6f725465 pler2D u_colorTe │ │ │ │ + 0x00d63870 783b200a 20202365 6e646966 200a2020 x; . #endif . │ │ │ │ + 0x00d63880 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d63890 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d638a0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d638b0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d638c0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d638d0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d638e0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d638f0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d63900 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d63910 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d63920 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d63930 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d63940 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d63950 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d63960 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d63970 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d63980 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d63990 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00d639a0 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00d639b0 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00d639c0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d639d0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d639e0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d639f0 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ + 0x00d63a00 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ + 0x00d63a10 50207665 63342063 6f6c6f72 203d2076 P vec4 color = v │ │ │ │ + 0x00d63a20 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00d63a30 200a2020 20204c4f 575f5020 76656334 . LOW_P vec4 │ │ │ │ + 0x00d63a40 20636f6c 6f72203d 20746578 74757265 color = texture │ │ │ │ + 0x00d63a50 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ + 0x00d63a60 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00d63a70 0a202023 656e6469 66200a20 20202066 . #endif . f │ │ │ │ + 0x00d63a80 6c6f6174 20723120 3d202876 5f6e6f72 loat r1 = (v_nor │ │ │ │ + 0x00d63a90 6d616c2e 7a202d20 61615069 78656c73 mal.z - aaPixels │ │ │ │ + 0x00d63aa0 436f756e 7429202a 2028765f 6e6f726d Count) * (v_norm │ │ │ │ + 0x00d63ab0 616c2e7a 202d2061 61506978 656c7343 al.z - aaPixelsC │ │ │ │ + 0x00d63ac0 6f756e74 293b200a 20202020 666c6f61 ount); . floa │ │ │ │ + 0x00d63ad0 74207232 203d2076 5f6e6f72 6d616c2e t r2 = v_normal. │ │ │ │ + 0x00d63ae0 78202a20 765f6e6f 726d616c 2e78202b x * v_normal.x + │ │ │ │ + 0x00d63af0 20765f6e 6f726d61 6c2e7920 2a20765f v_normal.y * v_ │ │ │ │ + 0x00d63b00 6e6f726d 616c2e79 3b200a20 20202066 normal.y; . f │ │ │ │ + 0x00d63b10 6c6f6174 20723320 3d20765f 6e6f726d loat r3 = v_norm │ │ │ │ + 0x00d63b20 616c2e7a 202a2076 5f6e6f72 6d616c2e al.z * v_normal. │ │ │ │ + 0x00d63b30 7a3b200a 20202020 666c6f61 7420616c z; . float al │ │ │ │ + 0x00d63b40 70686120 3d206d69 78287374 65702872 pha = mix(step(r │ │ │ │ + 0x00d63b50 332c2072 32292c20 736d6f6f 74687374 3, r2), smoothst │ │ │ │ + 0x00d63b60 65702872 312c2072 332c2072 32292c20 ep(r1, r3, r2), │ │ │ │ + 0x00d63b70 765f6e6f 726d616c 2e77293b 200a2020 v_normal.w); . │ │ │ │ + 0x00d63b80 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ + 0x00d63b90 616c436f 6c6f7220 3d20636f 6c6f723b alColor = color; │ │ │ │ + 0x00d63ba0 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00d63bb0 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ + 0x00d63bc0 61202a20 755f6f70 61636974 79202a20 a * u_opacity * │ │ │ │ + 0x00d63bd0 28312e30 202d2061 6c706861 293b200a (1.0 - alpha); . │ │ │ │ + 0x00d63be0 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ + 0x00d63bf0 6f722e61 203d3d20 302e3029 200a2020 or.a == 0.0) . │ │ │ │ + 0x00d63c00 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00d63c10 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d63c20 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d63c30 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d63c40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d63c50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d63c60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d63c70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d63c80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d63c90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d63ca0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d63cb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d63cc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d63cd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d63ce0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d63cf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d63d00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d63d10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d63d20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d63d30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d63d40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d63d50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d63d60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d63d70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d63d80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d63d90 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00d63da0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d63db0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d63dc0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d63dd0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d63de0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d63df0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d63e00 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d63e10 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d63e20 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d63e30 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d63e40 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d63e50 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d63e60 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d63e70 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d63e80 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d63e90 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d63ea0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d63eb0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d63ec0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d63ed0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d63ee0 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d63ef0 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d63f00 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d63f10 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d63f20 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d63f30 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d63f40 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d63f50 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d63f60 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d63f70 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d63f80 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d63f90 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00d63fa0 323b200a 2020666c 6f617420 616c7068 2; . float alph │ │ │ │ + 0x00d63fb0 6146726f 6d506174 7465726e 28666c6f aFromPattern(flo │ │ │ │ + 0x00d63fc0 61742063 75724c65 6e2c2066 6c6f6174 at curLen, float │ │ │ │ + 0x00d63fd0 20646173 684c656e 2c20666c 6f617420 dashLen, float │ │ │ │ + 0x00d63fe0 6761704c 656e2920 0a20207b 200a2020 gapLen) . { . │ │ │ │ + 0x00d63ff0 2020666c 6f617420 6c656e20 3d206461 float len = da │ │ │ │ + 0x00d64000 73684c65 6e202b20 6761704c 656e3b20 shLen + gapLen; │ │ │ │ + 0x00d64010 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00d64020 74203d20 66726163 74286375 724c656e t = fract(curLen │ │ │ │ + 0x00d64030 202f206c 656e2920 2a206c65 6e3b200a / len) * len; . │ │ │ │ + 0x00d64040 20202020 72657475 726e2073 74657028 return step( │ │ │ │ + 0x00d64050 6f666673 65742c20 64617368 4c656e29 offset, dashLen) │ │ │ │ + 0x00d64060 3b200a20 207d200a 2020636f 6e737420 ; . } . const │ │ │ │ + 0x00d64070 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d64080 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d64090 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d640a0 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ + 0x00d640b0 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ + 0x00d640c0 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ + 0x00d640d0 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ + 0x00d640e0 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ + 0x00d640f0 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ + 0x00d64100 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ + 0x00d64110 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ + 0x00d64120 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ + 0x00d64130 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ + 0x00d64140 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ + 0x00d64150 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ + 0x00d64160 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ + 0x00d64170 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ + 0x00d64180 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ + 0x00d64190 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00d641a0 76656334 20636f6c 6f72203d 206d6169 vec4 color = mai │ │ │ │ + 0x00d641b0 6e436f6c 6f72202b 20765f63 6f6c6f72 nColor + v_color │ │ │ │ + 0x00d641c0 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ + 0x00d641d0 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ + 0x00d641e0 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ + 0x00d641f0 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ + 0x00d64200 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ + 0x00d64210 2929202a 200a2020 20202020 20202020 )) * . │ │ │ │ + 0x00d64220 20202020 2020616c 70686146 726f6d50 alphaFromP │ │ │ │ + 0x00d64230 61747465 726e2876 5f6c656e 6774682e attern(v_length. │ │ │ │ + 0x00d64240 782c2075 5f706174 7465726e 2e782c20 x, u_pattern.x, │ │ │ │ + 0x00d64250 755f7061 74746572 6e2e7929 3b200a20 u_pattern.y); . │ │ │ │ + 0x00d64260 20202063 6f6c6f72 203d2076 65633428 color = vec4( │ │ │ │ + 0x00d64270 6d697828 636f6c6f 722e7267 622c2075 mix(color.rgb, u │ │ │ │ + 0x00d64280 5f6d6173 6b436f6c 6f722e72 67622c20 _maskColor.rgb, │ │ │ │ + 0x00d64290 755f6d61 736b436f 6c6f722e 61292c20 u_maskColor.a), │ │ │ │ + 0x00d642a0 636f6c6f 722e6129 3b200a20 20202076 color.a); . v │ │ │ │ + 0x00d642b0 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ + 0x00d642c0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d642d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d642e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d642f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d64300 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d64310 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d64320 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d64330 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d64340 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d64350 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d64360 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d64370 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d64380 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d64390 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d643a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d643b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d643c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d643d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d643e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d643f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d64400 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d64410 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d64420 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d64430 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d64440 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ + 0x00d64450 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ + 0x00d64460 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ + 0x00d64470 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ + 0x00d64480 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ + 0x00d64490 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ + 0x00d644a0 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ + 0x00d644b0 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ + 0x00d644c0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d644d0 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ + 0x00d644e0 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ + 0x00d644f0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d64500 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d64510 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d64520 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d64530 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d64540 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d64550 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d64560 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d64570 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d64580 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d64590 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d645a0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d645b0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d645c0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d645d0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d645e0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d645f0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d64600 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d64610 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d64620 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d64630 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d64640 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d64650 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d64660 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d64670 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d64680 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d64690 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d646a0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d646b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d646c0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d646d0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d646e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d646f0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d64700 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d64710 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d64720 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d64730 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d64740 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d64750 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d64760 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d64770 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d64780 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d64790 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d647a0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d647b0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d647c0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d647d0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d647e0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d647f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d64800 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d64810 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d64820 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d64830 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d64840 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d64850 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d64860 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d64870 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d64880 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d64890 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d648a0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d648b0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d648c0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d648d0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d648e0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d648f0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d64900 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d64910 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d64920 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d64930 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d64940 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d64950 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d64960 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d64970 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d64980 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d64990 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d649a0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d649b0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d649c0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d649d0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d649e0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d649f0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d64a00 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d64a10 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d64a20 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d64a30 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d64a40 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d64a50 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d64a60 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d64a70 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d64a80 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d64a90 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ + 0x00d64aa0 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ + 0x00d64ab0 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ + 0x00d64ac0 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ + 0x00d64ad0 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ + 0x00d64ae0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d64af0 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ + 0x00d64b00 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d64b10 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00d64b20 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00d64b30 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d64b40 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00d64b50 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ + 0x00d64b60 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ + 0x00d64b70 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ + 0x00d64b80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d64b90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d64ba0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d64bb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d64bc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d64bd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d64be0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d64bf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d64c00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d64c10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d64c20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d64c30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d64c40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d64c50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d64c60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d64c70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d64c80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d64c90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d64ca0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d64cb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d64cc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d64cd0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d64ce0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d64cf0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00d64d00 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00d64d10 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00d64d20 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d64d30 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00d64d40 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00d64d50 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00d64d60 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d64d70 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d64d80 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d64d90 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d64da0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d64db0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d64dc0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d64dd0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d64de0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d64df0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d64e00 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d64e10 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d64e20 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d64e30 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d64e40 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d64e50 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d64e60 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d64e70 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d64e80 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d64e90 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d64ea0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d64eb0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d64ec0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d64ed0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d64ee0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d64ef0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d64f00 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d64f10 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d64f20 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d64f30 766f742e 78797720 3d202870 69766f74 vot.xyw = (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 ................ │ │ │ │ + 0x00d64f50 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d64f60 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d64f70 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d64f80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d64f90 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d64fa0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d64fb0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d64fc0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d64fd0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d64fe0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d64ff0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d65000 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d65010 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d65020 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d65030 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d65040 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d65050 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d65060 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d65070 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d65080 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d65090 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d650a0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d650b0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d650c0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d650d0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d650e0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d650f0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d65100 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d65110 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d65120 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d65130 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d65140 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d65150 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d65160 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d65170 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d65180 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d65190 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d651a0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d651b0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d651c0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d651d0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d651e0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d651f0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d65200 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d65210 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d65220 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d65230 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d65240 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d65250 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d65260 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d65270 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d65280 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d65290 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d652a0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d652b0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d652c0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d652d0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d652e0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d652f0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d65300 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d65310 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d65320 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d65330 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d65340 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d65350 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d65360 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d65370 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d65380 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d65390 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d653a0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d653b0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d653c0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d653d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d653e0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d653f0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d65400 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00d65410 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00d65420 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00d65430 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00d65440 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00d65450 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00d65460 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00d65470 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00d65480 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ + 0x00d65490 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ + 0x00d654a0 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ + 0x00d654b0 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ + 0x00d654c0 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ + 0x00d654d0 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ + 0x00d654e0 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ + 0x00d654f0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00d65500 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d65510 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00d65520 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ + 0x00d65530 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d65540 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d65550 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ + 0x00d65560 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ + 0x00d65570 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ + 0x00d65580 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ + 0x00d65590 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ + 0x00d655a0 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ + 0x00d655b0 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ + 0x00d655c0 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ + 0x00d655d0 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ + 0x00d655e0 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ + 0x00d655f0 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ + 0x00d65600 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ + 0x00d65610 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ + 0x00d65620 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ + 0x00d65630 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ + 0x00d65640 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d65650 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d65660 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d65670 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d65680 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d65690 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d656a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d656b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d656c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d656d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d656e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d656f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d65700 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d65710 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d65720 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d65730 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d65740 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d65750 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d65760 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d65770 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d65780 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d65790 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d657a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d657b0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d657c0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d657d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d657e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d657f0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d65800 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d65810 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d65820 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d65830 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d65840 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d65850 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d65860 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d65870 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ + 0x00d65880 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ + 0x00d65890 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ + 0x00d658a0 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00d658b0 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ + 0x00d658c0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d658d0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00d658e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d658f0 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ + 0x00d65900 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d65910 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ + 0x00d65920 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d65930 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ + 0x00d65940 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d65950 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ + 0x00d65960 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ + 0x00d65970 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ + 0x00d65980 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ + 0x00d65990 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ + 0x00d659a0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d659b0 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ + 0x00d659c0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d659d0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d659e0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d659f0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d65a00 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d65a10 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d65a20 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d65a30 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d65a40 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d65a50 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d65a60 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d65a70 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d65a80 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d65a90 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d65aa0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d65ab0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d65ac0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d65ad0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d65ae0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d65af0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d65b00 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d65b10 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d65b20 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d65b30 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d65b40 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d65b50 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d65b60 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d65b70 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d65b80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d65b90 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d65ba0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d65bb0 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d65bc0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d65bd0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d65be0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d65bf0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d65c00 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d65c10 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d65c20 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d65c30 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d65c40 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d65c50 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d65c60 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d65c70 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d65c80 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d65c90 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d65ca0 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d65cb0 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d65cc0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d65cd0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d65ce0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d65cf0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d65d00 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d65d10 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d65d20 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d65d30 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d65d40 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d65d50 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d65d60 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d65d70 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d65d80 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d65d90 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d65da0 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d65db0 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d65dc0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d65dd0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d65de0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d65df0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d65e00 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d65e10 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d65e20 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d65e30 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d65e40 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d65e50 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d65e60 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d65e70 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d65e80 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d65e90 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d65ea0 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d65eb0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d65ec0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d65ed0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d65ee0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d65ef0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d65f00 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d65f10 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d65f20 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d65f30 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d65f40 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d65f50 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d65f60 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d65f70 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d65f80 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d65f90 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d65fa0 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d65fb0 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ + 0x00d65fc0 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ + 0x00d65fd0 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ + 0x00d65fe0 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ + 0x00d65ff0 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ + 0x00d66000 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ + 0x00d66010 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d66020 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ + 0x00d66030 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d66040 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d66050 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ + 0x00d66060 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ + 0x00d66070 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d66080 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d66090 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d660a0 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ + 0x00d660b0 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ + 0x00d660c0 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ + 0x00d660d0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d660e0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d660f0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d66100 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d66110 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d66120 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d66130 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d66140 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d66150 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d66160 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d66170 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d66180 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d66190 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d661a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d661b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d661c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d661d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d661e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d661f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d66200 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d66210 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d66220 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d66230 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d66240 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d66250 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d66260 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d66270 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d66280 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d66290 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d662a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d662b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d662c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d662d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d662e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d662f0 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ + 0x00d66300 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ + 0x00d66310 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ + 0x00d66320 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d66330 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d66340 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d66350 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d66360 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d66370 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d66380 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d66390 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d663a0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d663b0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d663c0 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ + 0x00d663d0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d663e0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d663f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d66400 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ + 0x00d66410 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ + 0x00d66420 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ + 0x00d66430 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ + 0x00d66440 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ + 0x00d66450 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d66460 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d66470 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d66480 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d66490 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d664a0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d664b0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d664c0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d664d0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d664e0 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d664f0 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d66500 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d66510 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d66520 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d66530 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d66540 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d66550 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d66560 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00d66570 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d66580 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d66590 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d665a0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d665b0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d665c0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d665d0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d665e0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d665f0 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d66600 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d66610 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d66620 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d66630 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d66640 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d66650 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d66660 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d66670 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d66680 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d66690 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d666a0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d666b0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d666c0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d666d0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d666e0 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d666f0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d66700 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d66710 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d66720 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d66730 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d66740 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d66750 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d66760 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d66770 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d66780 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d66790 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d667a0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d667b0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d667c0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d667d0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d667e0 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d667f0 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d66800 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d66810 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d66820 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d66830 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d66840 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d66850 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d66860 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d66870 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d66880 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d66890 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d668a0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d668b0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d668c0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d668d0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d668e0 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d668f0 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d66900 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d66910 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d66920 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d66930 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d66940 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d66950 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d66960 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00d66970 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d66980 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d66990 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d669a0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d669b0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d669c0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d669d0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d669e0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d669f0 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ + 0x00d66a00 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ + 0x00d66a10 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ + 0x00d66a20 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d66a30 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ + 0x00d66a40 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ + 0x00d66a50 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ + 0x00d66a60 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ + 0x00d66a70 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ + 0x00d66a80 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ + 0x00d66a90 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d66aa0 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ + 0x00d66ab0 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ + 0x00d66ac0 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00d66ad0 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00d66ae0 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ + 0x00d66af0 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ + 0x00d66b00 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d66b10 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d66b20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d66b30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d66b40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d66b50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d66b60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d66b70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d66b80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d66b90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d66ba0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d66bb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d66bc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d66bd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d66be0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d66bf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d66c00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d66c10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d66c20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d66c30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d66c40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d66c50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d66c60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d66c70 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d66c80 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d66c90 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d66ca0 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d66cb0 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d66cc0 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d66cd0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d66ce0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d66cf0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d66d00 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d66d10 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d66d20 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d66d30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d66d40 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d66d50 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d66d60 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d66d70 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d66d80 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d66d90 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d66da0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d66db0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d66dc0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d66dd0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d66de0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d66df0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d66e00 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d66e10 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d66e20 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d66e30 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d66e40 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d66e50 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d66e60 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ + 0x00d66e70 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ + 0x00d66e80 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d66e90 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ + 0x00d66ea0 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ + 0x00d66eb0 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ + 0x00d66ec0 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ + 0x00d66ed0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d66ee0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d66ef0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d66f00 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d66f10 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d66f20 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d66f30 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d66f40 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d66f50 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d66f60 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d66f70 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d66f80 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d66f90 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d66fa0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d66fb0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d66fc0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d66fd0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d66fe0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d66ff0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d67000 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d67010 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d67020 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d67030 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d67040 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d67050 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d67060 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d67070 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d67080 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d67090 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d670a0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d670b0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d670c0 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d670d0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d670e0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d670f0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d67100 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d67110 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d67120 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d67130 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d67140 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d67150 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d67160 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d67170 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d67180 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d67190 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d671a0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d671b0 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d671c0 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d671d0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d671e0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d671f0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d67200 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d67210 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d67220 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d67230 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d67240 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d67250 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d67260 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d67270 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d67280 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d67290 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d672a0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d672b0 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d672c0 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d672d0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d672e0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d672f0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d67300 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d67310 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d67320 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d67330 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d67340 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d67350 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d67360 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d67370 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d67380 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d67390 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d673a0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d673b0 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d673c0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d673d0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d673e0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d673f0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d67400 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d67410 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d67420 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d67430 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d67440 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d67450 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d67460 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ + 0x00d67470 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ + 0x00d67480 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ + 0x00d67490 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ + 0x00d674a0 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ + 0x00d674b0 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ + 0x00d674c0 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ + 0x00d674d0 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ + 0x00d674e0 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ + 0x00d674f0 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ + 0x00d67500 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ + 0x00d67510 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ + 0x00d67520 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ + 0x00d67530 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ + 0x00d67540 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ + 0x00d67550 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ + 0x00d67560 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ + 0x00d67570 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ + 0x00d67580 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ + 0x00d67590 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d675a0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d675b0 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ + 0x00d675c0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d675d0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d675e0 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ + 0x00d675f0 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ + 0x00d67600 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ + 0x00d67610 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ + 0x00d67620 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ + 0x00d67630 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ + 0x00d67640 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d67650 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ + 0x00d67660 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d67670 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ + 0x00d67680 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ + 0x00d67690 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ + 0x00d676a0 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ + 0x00d676b0 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ + 0x00d676c0 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ + 0x00d676d0 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ + 0x00d676e0 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ + 0x00d676f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d67700 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d67710 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d67720 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d67730 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d67740 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d67750 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d67760 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d67770 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d67780 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d67790 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d677a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d677b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d677c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d677d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d677e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d677f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d67800 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d67810 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d67820 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d67830 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d67840 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d67850 726d204d 45444955 4d5f5020 73616d70 rm MEDIUM_P samp │ │ │ │ + 0x00d67860 6c657232 44417272 61792075 5f636f6c ler2DArray u_col │ │ │ │ + 0x00d67870 6f725465 783b200a 2020696e 20766563 orTex; . in vec │ │ │ │ + 0x00d67880 3320765f 74657843 6f6f7264 733b200a 3 v_texCoords; . │ │ │ │ + 0x00d67890 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d678a0 67436f6c 6f723b20 0a202063 6f6e7374 gColor; . const │ │ │ │ + 0x00d678b0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d678c0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d678d0 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ + 0x00d678e0 29200a20 207b200a 20202020 765f4672 ) . { . v_Fr │ │ │ │ + 0x00d678f0 6167436f 6c6f7220 3d207465 78747572 agColor = textur │ │ │ │ + 0x00d67900 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d67910 74657843 6f6f7264 73293b20 0a20207d texCoords); . } │ │ │ │ + 0x00d67920 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d67930 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d67940 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d67950 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d67960 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d67970 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d67980 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d67990 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d679a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d679b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d679c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d679d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d679e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d679f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d67a00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d67a10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d67a20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d67a30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d67a40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d67a50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d67a60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d67a70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d67a80 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d67a90 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d67aa0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d67ab0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d67ac0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d67ad0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d67ae0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d67af0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d67b00 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00d67b10 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00d67b20 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d67b30 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00d67b40 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00d67b50 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00d67b60 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00d67b70 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d67b80 206d6174 3420755f 7069766f 74547261 mat4 u_pivotTra │ │ │ │ + 0x00d67b90 6e73666f 726d3b20 0a202075 6e69666f nsform; . unifo │ │ │ │ + 0x00d67ba0 726d2076 65633220 755f636f 6e747261 rm vec2 u_contra │ │ │ │ + 0x00d67bb0 73744761 6d6d613b 200a2020 756e6966 stGamma; . unif │ │ │ │ + 0x00d67bc0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d67bd0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00d67be0 666c6f61 7420755f 7a536361 6c653b20 float u_zScale; │ │ │ │ + 0x00d67bf0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d67c00 20755f69 6e746572 706f6c61 74696f6e u_interpolation │ │ │ │ + 0x00d67c10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d67c20 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d67c30 73733b20 0a202075 6e69666f 726d2073 ss; . uniform s │ │ │ │ + 0x00d67c40 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00d67c50 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d67c60 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d67c70 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d67c80 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d67c90 207b200a 20202369 66646566 20454e41 { . #ifdef ENA │ │ │ │ + 0x00d67ca0 424c455f 56544620 0a202020 204c4f57 BLE_VTF . LOW │ │ │ │ + 0x00d67cb0 5f502076 65633420 676c7970 68436f6c _P vec4 glyphCol │ │ │ │ + 0x00d67cc0 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ + 0x00d67cd0 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ + 0x00d67ce0 50207665 63342067 6c797068 436f6c6f P vec4 glyphColo │ │ │ │ + 0x00d67cf0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d67d00 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ + 0x00d67d10 6578436f 6f726429 3b200a20 2023656e exCoord); . #en │ │ │ │ + 0x00d67d20 64696620 0a202020 20666c6f 61742064 dif . float d │ │ │ │ + 0x00d67d30 69737420 3d207465 78747572 6528755f ist = texture(u_ │ │ │ │ + 0x00d67d40 6d61736b 5465782c 20765f6d 61736b54 maskTex, v_maskT │ │ │ │ + 0x00d67d50 6578436f 6f726429 2e723b20 0a202020 exCoord).r; . │ │ │ │ + 0x00d67d60 20666c6f 61742061 6c706861 203d2073 float alpha = s │ │ │ │ + 0x00d67d70 6d6f6f74 68737465 7028755f 636f6e74 moothstep(u_cont │ │ │ │ + 0x00d67d80 72617374 47616d6d 612e7820 2d20755f rastGamma.x - u_ │ │ │ │ + 0x00d67d90 636f6e74 72617374 47616d6d 612e792c contrastGamma.y, │ │ │ │ + 0x00d67da0 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00d67db0 2e78202b 20755f63 6f6e7472 61737447 .x + u_contrastG │ │ │ │ + 0x00d67dc0 616d6d61 2e792c20 64697374 29202a20 amma.y, dist) * │ │ │ │ + 0x00d67dd0 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d67de0 676c7970 68436f6c 6f722e61 202a3d20 glyphColor.a *= │ │ │ │ + 0x00d67df0 616c7068 613b200a 20202020 765f4672 alpha; . v_Fr │ │ │ │ + 0x00d67e00 6167436f 6c6f7220 3d20676c 79706843 agColor = glyphC │ │ │ │ + 0x00d67e10 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d67e20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d67e30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d67e40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d67e50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d67e60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d67e70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d67e80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d67e90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d67ea0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d67eb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d67ec0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d67ed0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d67ee0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d67ef0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d67f00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d67f10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d67f20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d67f30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d67f40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d67f50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d67f60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d67f70 63342076 5f746578 436f6f72 64733b20 c4 v_texCoords; │ │ │ │ + 0x00d67f80 0a202069 6e207665 63342076 5f6d6173 . in vec4 v_mas │ │ │ │ + 0x00d67f90 6b436f6c 6f723b20 0a20206f 75742076 kColor; . out v │ │ │ │ + 0x00d67fa0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d67fb0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d67fc0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d67fd0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d67fe0 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00d67ff0 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00d68000 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00d68010 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d68020 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00d68030 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d68040 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00d68050 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d68060 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d68070 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00d68080 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00d68090 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00d680a0 6c696e65 50617373 3b200a20 20756e69 linePass; . uni │ │ │ │ + 0x00d680b0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d680c0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00d680d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d680e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d680f0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d68100 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d68110 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ + 0x00d68120 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d68130 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ + 0x00d68140 200a2020 20207665 63342062 67436f6c . vec4 bgCol │ │ │ │ + 0x00d68150 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d68160 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ + 0x00d68170 6f726473 2e7a7729 202a2076 65633428 ords.zw) * vec4( │ │ │ │ + 0x00d68180 765f6d61 736b436f 6c6f722e 78797a2c v_maskColor.xyz, │ │ │ │ + 0x00d68190 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d681a0 2066696e 616c436f 6c6f7220 3d206d69 finalColor = mi │ │ │ │ + 0x00d681b0 7828636f 6c6f722c 206d6978 28626743 x(color, mix(bgC │ │ │ │ + 0x00d681c0 6f6c6f72 2c20636f 6c6f722c 20636f6c olor, color, col │ │ │ │ + 0x00d681d0 6f722e61 292c2062 67436f6c 6f722e61 or.a), bgColor.a │ │ │ │ + 0x00d681e0 293b200a 20202020 66696e61 6c436f6c ); . finalCol │ │ │ │ + 0x00d681f0 6f722e61 203d2063 6c616d70 28636f6c or.a = clamp(col │ │ │ │ + 0x00d68200 6f722e61 202b2062 67436f6c 6f722e61 or.a + bgColor.a │ │ │ │ + 0x00d68210 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00d68220 6f706163 69747920 2a20765f 6d61736b opacity * v_mask │ │ │ │ + 0x00d68230 436f6c6f 722e773b 200a2020 20206966 Color.w; . if │ │ │ │ + 0x00d68240 20286669 6e616c43 6f6c6f72 2e61203c (finalColor.a < │ │ │ │ + 0x00d68250 20302e30 3129200a 20202020 20206469 0.01) . di │ │ │ │ + 0x00d68260 73636172 643b200a 20202020 765f4672 scard; . v_Fr │ │ │ │ + 0x00d68270 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d68280 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d68290 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d682a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d682b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d682c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d682d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d682e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d682f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d68300 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d68310 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d68320 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d68330 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d68340 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d68350 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d68360 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d68370 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d68380 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d68390 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d683a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d683b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d683c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d683d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d683e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d683f0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d68400 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d68410 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d68420 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d68430 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d68440 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d68450 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d68460 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d68470 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d68480 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d68490 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d684a0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d684b0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d684c0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d684d0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d684e0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d684f0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d68500 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d68510 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d68520 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d68530 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d68540 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d68550 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d68560 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d68570 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d68580 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d68590 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d685a0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d685b0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d685c0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d685d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d685e0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d685f0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d68600 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d68610 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d68620 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d68630 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d68640 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d68650 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d68660 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d68670 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d68680 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d68690 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d686a0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d686b0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d686c0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d686d0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d686e0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d686f0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d68700 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d68710 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d68720 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d68730 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d68740 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d68750 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d68760 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d68770 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d68780 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d68790 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d687a0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d687b0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d687c0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d687d0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d687e0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d687f0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d68800 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d68810 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d68820 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d68830 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d68840 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d68850 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d68860 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d68870 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d68880 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d68890 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d688a0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d688b0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d688c0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d688d0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d688e0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d688f0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d68900 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d68910 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d68920 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d68930 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d68940 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d68950 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d68960 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d68970 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d68980 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d68990 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d689a0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d689b0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d689c0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d689d0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d689e0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d689f0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d68a00 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d68a10 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d68a20 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d68a30 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d68a40 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d68a50 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d68a60 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d68a70 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d68a80 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d68a90 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d68aa0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d68ab0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d68ac0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d68ad0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d68ae0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d68af0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d68b00 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00d68b10 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d68b20 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ + 0x00d68b30 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ + 0x00d68b40 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ + 0x00d68b50 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ + 0x00d68b60 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ + 0x00d68b70 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ + 0x00d68b80 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ + 0x00d68b90 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d68ba0 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ + 0x00d68bb0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d68bc0 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ + 0x00d68bd0 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ + 0x00d68be0 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ + 0x00d68bf0 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ + 0x00d68c00 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ + 0x00d68c10 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ + 0x00d68c20 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ + 0x00d68c30 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d68c40 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00d68c50 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ + 0x00d68c60 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ + 0x00d68c70 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d68c80 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ + 0x00d68c90 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d68ca0 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ + 0x00d68cb0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d68cc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d68cd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d68ce0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d68cf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d68d00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d68d10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d68d20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d68d30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d68d40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d68d50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d68d60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d68d70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d68d80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d68d90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d68da0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d68db0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d68dc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d68dd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d68de0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d68df0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d68e00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d68e10 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d68e20 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d68e30 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d68e40 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d68e50 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ + 0x00d68e60 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d68e70 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d68e80 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d68e90 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d68ea0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d68eb0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d68ec0 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ + 0x00d68ed0 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ + 0x00d68ee0 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ + 0x00d68ef0 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ + 0x00d68f00 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ + 0x00d68f10 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ + 0x00d68f20 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d68f30 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d68f40 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ + 0x00d68f50 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d68f60 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d68f70 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d68f80 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ + 0x00d68f90 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ + 0x00d68fa0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d68fb0 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ + 0x00d68fc0 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ + 0x00d68fd0 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ + 0x00d68fe0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d68ff0 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ + 0x00d69000 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ + 0x00d69010 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d69020 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ + 0x00d69030 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ + 0x00d69040 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ + 0x00d69050 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d69060 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ + 0x00d69070 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d69080 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d69090 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ + 0x00d690a0 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ + 0x00d690b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d690c0 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ + 0x00d690d0 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ + 0x00d690e0 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ + 0x00d690f0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d69100 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ + 0x00d69110 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ + 0x00d69120 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ + 0x00d69130 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ + 0x00d69140 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d69150 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d69160 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d69170 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ + 0x00d69180 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ + 0x00d69190 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ + 0x00d691a0 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ + 0x00d691b0 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ + 0x00d691c0 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ + 0x00d691d0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d691e0 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ + 0x00d691f0 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ + 0x00d69200 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ + 0x00d69210 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ + 0x00d69220 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ + 0x00d69230 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ + 0x00d69240 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ + 0x00d69250 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ + 0x00d69260 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d69270 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ + 0x00d69280 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ + 0x00d69290 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ + 0x00d692a0 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ + 0x00d692b0 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ + 0x00d692c0 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ + 0x00d692d0 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ + 0x00d692e0 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ + 0x00d692f0 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ + 0x00d69300 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ + 0x00d69310 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ + 0x00d69320 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d69330 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ + 0x00d69340 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ + 0x00d69350 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ + 0x00d69360 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d69370 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ + 0x00d69380 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ + 0x00d69390 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ + 0x00d693a0 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ + 0x00d693b0 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ + 0x00d693c0 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ + 0x00d693d0 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ + 0x00d693e0 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ + 0x00d693f0 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ + 0x00d69400 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ + 0x00d69410 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ + 0x00d69420 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ + 0x00d69430 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ + 0x00d69440 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d69450 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ + 0x00d69460 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ + 0x00d69470 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ + 0x00d69480 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d69490 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ + 0x00d694a0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d694b0 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ + 0x00d694c0 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ + 0x00d694d0 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00d694e0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d694f0 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00d69500 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00d69510 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00d69520 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ + 0x00d69530 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ + 0x00d69540 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00d69550 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00d69560 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ + 0x00d69570 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ + 0x00d69580 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ + 0x00d69590 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ + 0x00d695a0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d695b0 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ + 0x00d695c0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d695d0 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ + 0x00d695e0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d695f0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d69600 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d69610 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ + 0x00d69620 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ + 0x00d69630 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ + 0x00d69640 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d69650 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00d69660 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ + 0x00d69670 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00d69680 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ + 0x00d69690 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ + 0x00d696a0 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ + 0x00d696b0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d696c0 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ + 0x00d696d0 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ + 0x00d696e0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d696f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d69700 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d69710 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d69720 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d69730 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d69740 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d69750 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d69760 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d69770 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d69780 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d69790 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d697a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d697b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d697c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d697d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d697e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d697f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d69800 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d69810 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d69820 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d69830 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d69840 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d69850 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d69860 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d69870 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d69880 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d69890 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d698a0 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ + 0x00d698b0 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ + 0x00d698c0 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ + 0x00d698d0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d698e0 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00d698f0 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ + 0x00d69900 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ + 0x00d69910 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d69920 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d69930 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d69940 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d69950 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d69960 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d69970 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d69980 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d69990 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d699a0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d699b0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d699c0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d699d0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d699e0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d699f0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d69a00 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d69a10 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d69a20 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d69a30 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d69a40 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d69a50 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d69a60 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d69a70 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d69a80 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d69a90 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d69aa0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d69ab0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d69ac0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d69ad0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d69ae0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d69af0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d69b00 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d69b10 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d69b20 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d69b30 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d69b40 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d69b50 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d69b60 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d69b70 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d69b80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d69b90 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d69ba0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d69bb0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d69bc0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d69bd0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d69be0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d69bf0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d69c00 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d69c10 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d69c20 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d69c30 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d69c40 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d69c50 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d69c60 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d69c70 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d69c80 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d69c90 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d69ca0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d69cb0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d69cc0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d69cd0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d69ce0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d69cf0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d69d00 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d69d10 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d69d20 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d69d30 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d69d40 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d69d50 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d69d60 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d69d70 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d69d80 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d69d90 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d69da0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d69db0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d69dc0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d69dd0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d69de0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d69df0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d69e00 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d69e10 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d69e20 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d69e30 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d69e40 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d69e50 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d69e60 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d69e70 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d69e80 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d69e90 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d69ea0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d69eb0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d69ec0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d69ed0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d69ee0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d69ef0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d69f00 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d69f10 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d69f20 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d69f30 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d69f40 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d69f50 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d69f60 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d69f70 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d69f80 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d69f90 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d69fa0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d69fb0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d69fc0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d69fd0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d69fe0 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00d69ff0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d6a000 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d6a010 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d6a020 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00d6a030 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ + 0x00d6a040 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d6a050 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d6a060 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ + 0x00d6a070 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ + 0x00d6a080 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00d6a090 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d6a0a0 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00d6a0b0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d6a0c0 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00d6a0d0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00d6a0e0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00d6a0f0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d6a100 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d6a110 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ + 0x00d6a120 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ + 0x00d6a130 3b200a20 207d200a 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 │ │ │ │ @@ -58405,1911 +58405,1911 @@ │ │ │ │ 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; . } ....... │ │ │ │ + 0x00d6a290 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d6a2a0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d6a2b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d6a2c0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d6a2d0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d6a2e0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d6a2f0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d6a300 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d6a310 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d6a320 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d6a330 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d6a340 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d6a350 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d6a360 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d6a370 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6a380 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d6a390 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d6a3a0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d6a3b0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d6a3c0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d6a3d0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d6a3e0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d6a3f0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d6a400 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d6a410 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d6a420 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d6a430 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d6a440 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d6a450 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d6a460 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d6a470 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6a480 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d6a490 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d6a4a0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d6a4b0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d6a4c0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d6a4d0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d6a4e0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d6a4f0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d6a500 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d6a510 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6a520 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d6a530 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d6a540 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d6a550 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d6a560 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d6a570 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d6a580 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d6a590 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d6a5a0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d6a5b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6a5c0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d6a5d0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d6a5e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6a5f0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d6a600 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d6a610 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d6a620 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d6a630 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d6a640 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d6a650 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d6a660 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d6a670 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d6a680 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d6a690 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d6a6a0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d6a6b0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d6a6c0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d6a6d0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d6a6e0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d6a6f0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d6a700 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d6a710 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d6a720 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d6a730 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d6a740 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d6a750 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d6a760 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d6a770 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d6a780 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d6a790 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d6a7a0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d6a7b0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d6a7c0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d6a7d0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d6a7e0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d6a7f0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d6a800 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d6a810 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d6a820 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d6a830 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d6a840 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d6a850 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d6a860 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d6a870 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d6a880 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d6a890 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d6a8a0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d6a8b0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d6a8c0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d6a8d0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d6a8e0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d6a8f0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d6a900 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d6a910 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d6a920 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d6a930 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d6a940 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d6a950 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d6a960 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d6a970 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d6a980 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d6a990 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ + 0x00d6a9a0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ + 0x00d6a9b0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00d6a9c0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00d6a9d0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00d6a9e0 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00d6a9f0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d6aa00 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d6aa10 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d6aa20 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00d6aa30 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00d6aa40 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d6aa50 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00d6aa60 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6aa70 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d6aa80 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00d6aa90 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00d6aaa0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00d6aab0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00d6aac0 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00d6aad0 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00d6aae0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6aaf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6ab00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6ab10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6ab20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6ab30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6ab40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6ab50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6ab60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6ab70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6ab80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6ab90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6aba0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6abb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6abc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6abd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6abe0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6abf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6ac00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6ac10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6ac20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6ac30 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d6ac40 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d6ac50 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d6ac60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d6ac70 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00d6ac80 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00d6ac90 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00d6aca0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00d6acb0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d6acc0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d6acd0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d6ace0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d6acf0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d6ad00 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d6ad10 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d6ad20 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d6ad30 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d6ad40 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d6ad50 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d6ad60 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d6ad70 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d6ad80 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d6ad90 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d6ada0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6adb0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d6adc0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d6add0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d6ade0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d6adf0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d6ae00 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d6ae10 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d6ae20 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d6ae30 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d6ae40 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d6ae50 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d6ae60 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d6ae70 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d6ae80 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d6ae90 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d6aea0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d6aeb0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d6aec0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d6aed0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d6aee0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d6aef0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d6af00 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d6af10 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d6af20 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d6af30 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d6af40 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d6af50 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d6af60 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6af70 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d6af80 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d6af90 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d6afa0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d6afb0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d6afc0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d6afd0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d6afe0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d6aff0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d6b000 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d6b010 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d6b020 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d6b030 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d6b040 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d6b050 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d6b060 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d6b070 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d6b080 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d6b090 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d6b0a0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d6b0b0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d6b0c0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d6b0d0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d6b0e0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d6b0f0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d6b100 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d6b110 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d6b120 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d6b130 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d6b140 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d6b150 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d6b160 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d6b170 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d6b180 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d6b190 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d6b1a0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d6b1b0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d6b1c0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d6b1d0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d6b1e0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d6b1f0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d6b200 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d6b210 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d6b220 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d6b230 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d6b240 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d6b250 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d6b260 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d6b270 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d6b280 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d6b290 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d6b2a0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d6b2b0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d6b2c0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d6b2d0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d6b2e0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d6b2f0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d6b300 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d6b310 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d6b320 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d6b330 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d6b340 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d6b350 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d6b360 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d6b370 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d6b380 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d6b390 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d6b3a0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d6b3b0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d6b3c0 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00d6b3d0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d6b3e0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d6b3f0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d6b400 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00d6b410 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ + 0x00d6b420 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ + 0x00d6b430 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ + 0x00d6b440 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d6b450 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ + 0x00d6b460 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00d6b470 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d6b480 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d6b490 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00d6b4a0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00d6b4b0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00d6b4c0 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ + 0x00d6b4d0 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ + 0x00d6b4e0 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ + 0x00d6b4f0 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ + 0x00d6b500 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ + 0x00d6b510 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ + 0x00d6b520 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ + 0x00d6b530 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d6b540 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6b550 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6b560 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6b570 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6b580 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6b590 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6b5a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6b5b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6b5c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6b5d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6b5e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6b5f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6b600 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6b610 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6b620 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6b630 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6b640 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6b650 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6b660 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6b670 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6b680 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d6b690 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d6b6a0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d6b6b0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d6b6c0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d6b6d0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d6b6e0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d6b6f0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d6b700 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00d6b710 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d6b720 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d6b730 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d6b740 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d6b750 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00d6b760 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00d6b770 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00d6b780 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d6b790 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00d6b7a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d6b7b0 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00d6b7c0 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d6b7d0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d6b7e0 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00d6b7f0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00d6b800 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00d6b810 6c696e65 50617373 3b200a20 20636f6e linePass; . con │ │ │ │ + 0x00d6b820 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d6b830 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d6b840 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d6b850 6e282920 0a20207b 200a2020 23696664 n() . { . #ifd │ │ │ │ + 0x00d6b860 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00d6b870 2020204c 4f575f50 20766563 34206669 LOW_P vec4 fi │ │ │ │ + 0x00d6b880 6e616c43 6f6c6f72 203d2076 5f636f6c nalColor = v_col │ │ │ │ + 0x00d6b890 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ + 0x00d6b8a0 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ + 0x00d6b8b0 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ + 0x00d6b8c0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d6b8d0 636f6c6f 72546578 436f6f72 6473293b colorTexCoords); │ │ │ │ + 0x00d6b8e0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d6b8f0 66696e61 6c436f6c 6f722e61 202a3d20 finalColor.a *= │ │ │ │ + 0x00d6b900 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d6b910 765f4672 6167436f 6c6f7220 3d206669 v_FragColor = fi │ │ │ │ + 0x00d6b920 6e616c43 6f6c6f72 3b200a20 207d200a nalColor; . } . │ │ │ │ + 0x00d6b930 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6b940 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6b950 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6b960 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6b970 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6b980 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6b990 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6b9a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6b9b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6b9c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6b9d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6b9e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6b9f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6ba00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6ba10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6ba20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6ba30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6ba40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6ba50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6ba60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6ba70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6ba80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6ba90 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00d6baa0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00d6bab0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00d6bac0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d6bad0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d6bae0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d6baf0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d6bb00 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d6bb10 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d6bb20 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d6bb30 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d6bb40 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00d6bb50 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d6bb60 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00d6bb70 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d6bb80 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00d6bb90 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00d6bba0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00d6bbb0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d6bbc0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d6bbd0 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00d6bbe0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d6bbf0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d6bc00 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d6bc10 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d6bc20 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d6bc30 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d6bc40 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d6bc50 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d6bc60 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d6bc70 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d6bc80 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d6bc90 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6bca0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d6bcb0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d6bcc0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d6bcd0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d6bce0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d6bcf0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d6bd00 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d6bd10 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d6bd20 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d6bd30 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d6bd40 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d6bd50 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d6bd60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6bd70 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d6bd80 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d6bd90 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6bda0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d6bdb0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d6bdc0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d6bdd0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d6bde0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d6bdf0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d6be00 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d6be10 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d6be20 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d6be30 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d6be40 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d6be50 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d6be60 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d6be70 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d6be80 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d6be90 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d6bea0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d6beb0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d6bec0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d6bed0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d6bee0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d6bef0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d6bf00 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d6bf10 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d6bf20 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d6bf30 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d6bf40 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6bf50 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d6bf60 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d6bf70 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d6bf80 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d6bf90 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d6bfa0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d6bfb0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d6bfc0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d6bfd0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d6bfe0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d6bff0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d6c000 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d6c010 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d6c020 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d6c030 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d6c040 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d6c050 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d6c060 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d6c070 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d6c080 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d6c090 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d6c0a0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d6c0b0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d6c0c0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d6c0d0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d6c0e0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d6c0f0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d6c100 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d6c110 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d6c120 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d6c130 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d6c140 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d6c150 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d6c160 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d6c170 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d6c180 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ + 0x00d6c190 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ + 0x00d6c1a0 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ + 0x00d6c1b0 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ + 0x00d6c1c0 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ + 0x00d6c1d0 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ + 0x00d6c1e0 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ + 0x00d6c1f0 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ + 0x00d6c200 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ + 0x00d6c210 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ + 0x00d6c220 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ + 0x00d6c230 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ + 0x00d6c240 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ + 0x00d6c250 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ + 0x00d6c260 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ + 0x00d6c270 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d6c280 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d6c290 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ + 0x00d6c2a0 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ + 0x00d6c2b0 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ + 0x00d6c2c0 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ + 0x00d6c2d0 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ + 0x00d6c2e0 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ + 0x00d6c2f0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00d6c300 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ + 0x00d6c310 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ + 0x00d6c320 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d6c330 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d6c340 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ + 0x00d6c350 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ + 0x00d6c360 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00d6c370 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00d6c380 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d6c390 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d6c3a0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d6c3b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6c3c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6c3d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6c3e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6c3f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6c400 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6c410 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6c420 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6c430 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6c440 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6c450 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6c460 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6c470 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6c480 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6c490 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6c4a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6c4b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6c4c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6c4d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6c4e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6c4f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6c500 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6c510 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d6c520 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00d6c530 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ + 0x00d6c540 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ + 0x00d6c550 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ + 0x00d6c560 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ + 0x00d6c570 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00d6c580 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d6c590 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d6c5a0 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d6c5b0 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ + 0x00d6c5c0 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ + 0x00d6c5d0 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ + 0x00d6c5e0 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ + 0x00d6c5f0 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ + 0x00d6c600 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d6c610 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ + 0x00d6c620 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ + 0x00d6c630 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ + 0x00d6c640 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ + 0x00d6c650 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00d6c660 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ + 0x00d6c670 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d6c680 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d6c690 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ + 0x00d6c6a0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d6c6b0 20666c6f 6174204c 203d2064 6f742874 float L = dot(t │ │ │ │ + 0x00d6c6c0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d6c6d0 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00d6c6e0 72647329 2e726762 2c206b57 65696768 rds).rgb, kWeigh │ │ │ │ + 0x00d6c6f0 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ + 0x00d6c700 4c6c6566 74203d20 646f7428 74657874 Lleft = dot(text │ │ │ │ + 0x00d6c710 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d6c720 765f6f66 66736574 302e7879 292e7267 v_offset0.xy).rg │ │ │ │ + 0x00d6c730 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ + 0x00d6c740 20202066 6c6f6174 204c746f 70203d20 float Ltop = │ │ │ │ + 0x00d6c750 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ + 0x00d6c760 6c6f7254 65782c20 765f6f66 66736574 lorTex, v_offset │ │ │ │ + 0x00d6c770 302e7a77 292e7267 622c206b 57656967 0.zw).rgb, kWeig │ │ │ │ + 0x00d6c780 68747329 3b200a20 20202076 65633420 hts); . vec4 │ │ │ │ + 0x00d6c790 64656c74 613b200a 20202020 64656c74 delta; . delt │ │ │ │ + 0x00d6c7a0 612e7879 203d2061 6273284c 202d2076 a.xy = abs(L - v │ │ │ │ + 0x00d6c7b0 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ + 0x00d6c7c0 293b200a 20202020 76656332 20656467 ); . vec2 edg │ │ │ │ + 0x00d6c7d0 6573203d 20737465 70286b54 68726573 es = step(kThres │ │ │ │ + 0x00d6c7e0 686f6c64 2c206465 6c74612e 7879293b hold, delta.xy); │ │ │ │ + 0x00d6c7f0 200a2020 20206966 2028646f 74286564 . if (dot(ed │ │ │ │ + 0x00d6c800 6765732c 20766563 3228312e 302c2031 ges, vec2(1.0, 1 │ │ │ │ + 0x00d6c810 2e302929 203d3d20 302e3029 200a2020 .0)) == 0.0) . │ │ │ │ + 0x00d6c820 20202020 20206469 73636172 643b200a discard; . │ │ │ │ + 0x00d6c830 20202020 666c6f61 74204c72 69676874 float Lright │ │ │ │ + 0x00d6c840 203d2064 6f742874 65787475 72652875 = dot(texture(u │ │ │ │ + 0x00d6c850 5f636f6c 6f725465 782c2076 5f6f6666 _colorTex, v_off │ │ │ │ + 0x00d6c860 73657431 2e787929 2e726762 2c206b57 set1.xy).rgb, kW │ │ │ │ + 0x00d6c870 65696768 7473293b 200a2020 2020666c eights); . fl │ │ │ │ + 0x00d6c880 6f617420 4c626f74 746f6d20 203d2064 oat Lbottom = d │ │ │ │ + 0x00d6c890 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ + 0x00d6c8a0 6f725465 782c2076 5f6f6666 73657431 orTex, v_offset1 │ │ │ │ + 0x00d6c8b0 2e7a7729 2e726762 2c206b57 65696768 .zw).rgb, kWeigh │ │ │ │ + 0x00d6c8c0 7473293b 200a2020 20206465 6c74612e ts); . delta. │ │ │ │ + 0x00d6c8d0 7a77203d 20616273 284c202d 20766563 zw = abs(L - vec │ │ │ │ + 0x00d6c8e0 32284c72 69676874 2c204c62 6f74746f 2(Lright, Lbotto │ │ │ │ + 0x00d6c8f0 6d29293b 200a2020 20207665 6332206d m)); . vec2 m │ │ │ │ + 0x00d6c900 61784465 6c746120 3d206d61 78286465 axDelta = max(de │ │ │ │ + 0x00d6c910 6c74612e 78792c20 64656c74 612e7a77 lta.xy, delta.zw │ │ │ │ + 0x00d6c920 293b200a 20202020 666c6f61 74204c6c ); . float Ll │ │ │ │ + 0x00d6c930 6566746c 65667420 3d20646f 74287465 eftleft = dot(te │ │ │ │ + 0x00d6c940 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d6c950 2c20765f 6f666673 6574322e 7879292e , v_offset2.xy). │ │ │ │ + 0x00d6c960 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ + 0x00d6c970 0a202020 20666c6f 6174204c 746f7074 . float Ltopt │ │ │ │ + 0x00d6c980 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ + 0x00d6c990 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ + 0x00d6c9a0 66667365 74322e7a 77292e72 67622c20 ffset2.zw).rgb, │ │ │ │ + 0x00d6c9b0 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ + 0x00d6c9c0 64656c74 612e7a77 203d2061 62732876 delta.zw = abs(v │ │ │ │ + 0x00d6c9d0 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ + 0x00d6c9e0 202d2076 65633228 4c6c6566 746c6566 - vec2(Lleftlef │ │ │ │ + 0x00d6c9f0 742c204c 746f7074 6f702929 3b200a20 t, Ltoptop)); . │ │ │ │ + 0x00d6ca00 2020206d 61784465 6c746120 3d206d61 maxDelta = ma │ │ │ │ + 0x00d6ca10 78286d61 7844656c 74612e78 792c2064 x(maxDelta.xy, d │ │ │ │ + 0x00d6ca20 656c7461 2e7a7729 3b200a20 20202066 elta.zw); . f │ │ │ │ + 0x00d6ca30 6c6f6174 2066696e 616c4465 6c746120 loat finalDelta │ │ │ │ + 0x00d6ca40 3d206d61 78286d61 7844656c 74612e78 = max(maxDelta.x │ │ │ │ + 0x00d6ca50 2c206d61 7844656c 74612e79 293b200a , maxDelta.y); . │ │ │ │ + 0x00d6ca60 20202020 65646765 73202a3d 20737465 edges *= ste │ │ │ │ + 0x00d6ca70 70286669 6e616c44 656c7461 2c20534d p(finalDelta, SM │ │ │ │ + 0x00d6ca80 41415f4c 4f43414c 5f434f4e 54524153 AA_LOCAL_CONTRAS │ │ │ │ + 0x00d6ca90 545f4144 41505441 54494f4e 5f464143 T_ADAPTATION_FAC │ │ │ │ + 0x00d6caa0 544f5220 2a206465 6c74612e 7879293b TOR * delta.xy); │ │ │ │ + 0x00d6cab0 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ + 0x00d6cac0 72203d20 76656334 28656467 65732c20 r = vec4(edges, │ │ │ │ + 0x00d6cad0 302e302c 20312e30 293b200a 20207d20 0.0, 1.0); . } │ │ │ │ + 0x00d6cae0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6caf0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6cb00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6cb10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6cb20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6cb30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6cb40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6cb50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6cb60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6cb70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6cb80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6cb90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6cba0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6cbb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6cbc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6cbd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6cbe0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6cbf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6cc00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6cc10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6cc20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6cc30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6cc40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6cc50 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00d6cc60 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00d6cc70 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00d6cc80 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d6cc90 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d6cca0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d6ccb0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d6ccc0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d6ccd0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d6cce0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d6ccf0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d6cd00 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00d6cd10 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d6cd20 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00d6cd30 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d6cd40 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00d6cd50 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00d6cd60 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00d6cd70 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d6cd80 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d6cd90 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00d6cda0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d6cdb0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d6cdc0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d6cdd0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d6cde0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d6cdf0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d6ce00 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d6ce10 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d6ce20 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d6ce30 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d6ce40 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d6ce50 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6ce60 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d6ce70 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d6ce80 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d6ce90 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d6cea0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d6ceb0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d6cec0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d6ced0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d6cee0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d6cef0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d6cf00 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d6cf10 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d6cf20 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6cf30 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d6cf40 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d6cf50 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6cf60 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d6cf70 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d6cf80 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d6cf90 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d6cfa0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d6cfb0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d6cfc0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d6cfd0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d6cfe0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d6cff0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d6d000 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d6d010 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d6d020 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d6d030 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d6d040 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d6d050 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d6d060 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d6d070 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d6d080 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d6d090 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d6d0a0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d6d0b0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d6d0c0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d6d0d0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d6d0e0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d6d0f0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d6d100 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6d110 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d6d120 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d6d130 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d6d140 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d6d150 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d6d160 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d6d170 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d6d180 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d6d190 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d6d1a0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d6d1b0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d6d1c0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d6d1d0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d6d1e0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d6d1f0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d6d200 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d6d210 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d6d220 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d6d230 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d6d240 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d6d250 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d6d260 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d6d270 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d6d280 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d6d290 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d6d2a0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d6d2b0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d6d2c0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d6d2d0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d6d2e0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d6d2f0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d6d300 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d6d310 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d6d320 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d6d330 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d6d340 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d6d350 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00d6d360 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d6d370 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d6d380 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ + 0x00d6d390 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ + 0x00d6d3a0 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ + 0x00d6d3b0 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ + 0x00d6d3c0 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ + 0x00d6d3d0 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ + 0x00d6d3e0 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00d6d3f0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d6d400 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d6d410 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ + 0x00d6d420 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ + 0x00d6d430 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00d6d440 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ + 0x00d6d450 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ + 0x00d6d460 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d6d470 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00d6d480 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6d490 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6d4a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6d4b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6d4c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6d4d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6d4e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6d4f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6d500 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6d510 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6d520 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6d530 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6d540 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6d550 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6d560 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6d570 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6d580 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6d590 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6d5a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6d5b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6d5c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6d5d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d6d5e0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d6d5f0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00d6d600 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00d6d610 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00d6d620 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d6d630 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00d6d640 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d6d650 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00d6d660 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d6d670 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d6d680 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d6d690 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d6d6a0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d6d6b0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d6d6c0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d6d6d0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d6d6e0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d6d6f0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d6d700 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d6d710 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d6d720 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d6d730 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d6d740 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d6d750 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00d6d760 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00d6d770 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d6d780 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00d6d790 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00d6d7a0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d6d7b0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d6d7c0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d6d7d0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d6d7e0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d6d7f0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d6d800 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d6d810 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d6d820 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d6d830 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d6d840 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d6d850 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d6d860 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6d870 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d6d880 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d6d890 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6d8a0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d6d8b0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d6d8c0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d6d8d0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d6d8e0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d6d8f0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d6d900 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d6d910 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d6d920 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d6d930 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6d940 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d6d950 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d6d960 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d6d970 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d6d980 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d6d990 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d6d9a0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d6d9b0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d6d9c0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d6d9d0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d6d9e0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d6d9f0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d6da00 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d6da10 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d6da20 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d6da30 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d6da40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6da50 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d6da60 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d6da70 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d6da80 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d6da90 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d6daa0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d6dab0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d6dac0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d6dad0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d6dae0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d6daf0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d6db00 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d6db10 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d6db20 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d6db30 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d6db40 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d6db50 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d6db60 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d6db70 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d6db80 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d6db90 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d6dba0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d6dbb0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d6dbc0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d6dbd0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d6dbe0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d6dbf0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d6dc00 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d6dc10 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d6dc20 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d6dc30 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d6dc40 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d6dc50 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d6dc60 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d6dc70 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d6dc80 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d6dc90 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d6dca0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d6dcb0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d6dcc0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d6dcd0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d6dce0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d6dcf0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d6dd00 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d6dd10 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d6dd20 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d6dd30 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d6dd40 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d6dd50 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ + 0x00d6dd60 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ + 0x00d6dd70 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d6dd80 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00d6dd90 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00d6dda0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d6ddb0 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ + 0x00d6ddc0 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00d6ddd0 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ + 0x00d6dde0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d6ddf0 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ + 0x00d6de00 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ + 0x00d6de10 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d6de20 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00d6de30 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00d6de40 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ + 0x00d6de50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d6de60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6de70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6de80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6de90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6dea0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6deb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6dec0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6ded0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6dee0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6def0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6df00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6df10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6df20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6df30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6df40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6df50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6df60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6df70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6df80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6df90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6dfa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6dfb0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d6dfc0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d6dfd0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d6dfe0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d6dff0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d6e000 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d6e010 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d6e020 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d6e030 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d6e040 69666f72 6d207665 63342075 5f726f75 iform vec4 u_rou │ │ │ │ + 0x00d6e050 74655061 72616d73 3b200a20 20756e69 teParams; . uni │ │ │ │ + 0x00d6e060 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d6e070 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d6e080 63342075 5f6d6173 6b436f6c 6f723b20 c4 u_maskColor; │ │ │ │ + 0x00d6e090 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d6e0a0 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d6e0b0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d6e0c0 755f6661 6b65436f 6c6f723b 200a2020 u_fakeColor; . │ │ │ │ + 0x00d6e0d0 756e6966 6f726d20 76656334 20755f66 uniform vec4 u_f │ │ │ │ + 0x00d6e0e0 616b654f 75746c69 6e65436f 6c6f723b akeOutlineColor; │ │ │ │ + 0x00d6e0f0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d6e100 20755f66 616b6542 6f726465 72733b20 u_fakeBorders; │ │ │ │ + 0x00d6e110 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d6e120 755f7061 74746572 6e3b200a 2020756e u_pattern; . un │ │ │ │ + 0x00d6e130 69666f72 6d207665 63322075 5f616e67 iform vec2 u_ang │ │ │ │ + 0x00d6e140 6c65436f 7353696e 3b200a20 20756e69 leCosSin; . uni │ │ │ │ + 0x00d6e150 666f726d 20666c6f 61742075 5f617272 form float u_arr │ │ │ │ + 0x00d6e160 6f774861 6c665769 6474683b 200a2020 owHalfWidth; . │ │ │ │ + 0x00d6e170 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d6e180 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d6e190 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d6e1a0 636f6c6f 72546578 3b200a20 20636f6e colorTex; . con │ │ │ │ + 0x00d6e1b0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d6e1c0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d6e1d0 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d6e1e0 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00d6e1f0 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ + 0x00d6e200 74657874 75726528 755f636f 6c6f7254 texture(u_colorT │ │ │ │ + 0x00d6e210 65782c20 765f636f 6c6f7254 6578436f ex, v_colorTexCo │ │ │ │ + 0x00d6e220 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ + 0x00d6e230 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ + 0x00d6e240 61636974 793b200a 20202020 69662028 acity; . if ( │ │ │ │ + 0x00d6e250 66696e61 6c436f6c 6f722e61 203c2030 finalColor.a < 0 │ │ │ │ + 0x00d6e260 2e303129 200a2020 20202020 64697363 .01) . disc │ │ │ │ + 0x00d6e270 6172643b 200a2020 20206669 6e616c43 ard; . finalC │ │ │ │ + 0x00d6e280 6f6c6f72 203d2076 65633428 6d697828 olor = vec4(mix( │ │ │ │ + 0x00d6e290 66696e61 6c436f6c 6f722e72 67622c20 finalColor.rgb, │ │ │ │ + 0x00d6e2a0 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ + 0x00d6e2b0 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ + 0x00d6e2c0 2066696e 616c436f 6c6f722e 61293b20 finalColor.a); │ │ │ │ + 0x00d6e2d0 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00d6e2e0 203d2066 696e616c 436f6c6f 723b200a = finalColor; . │ │ │ │ + 0x00d6e2f0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d6e300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6e310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6e320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6e330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6e340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6e350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6e360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6e370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6e380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6e390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6e3a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6e3b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6e3c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6e3d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6e3e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6e3f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6e400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6e410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6e420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6e430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6e440 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d6e450 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d6e460 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d6e470 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d6e480 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d6e490 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d6e4a0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d6e4b0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d6e4c0 23656e64 6966200a 20206f75 74207665 #endif . out ve │ │ │ │ + 0x00d6e4d0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00d6e4e0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d6e4f0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d6e500 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d6e510 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00d6e520 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00d6e530 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00d6e540 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00d6e550 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00d6e560 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d6e570 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d6e580 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00d6e590 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00d6e5a0 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00d6e5b0 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00d6e5c0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d6e5d0 696e6550 6173733b 200a2020 636f6e73 inePass; . cons │ │ │ │ + 0x00d6e5e0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d6e5f0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d6e600 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ + 0x00d6e610 2829200a 20207b20 0a202023 69666465 () . { . #ifde │ │ │ │ + 0x00d6e620 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d6e630 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00d6e640 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ + 0x00d6e650 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ + 0x00d6e660 50207665 63342063 6f6c6f72 203d2074 P vec4 color = t │ │ │ │ + 0x00d6e670 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d6e680 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00d6e690 7264293b 200a2020 23656e64 6966200a rd); . #endif . │ │ │ │ + 0x00d6e6a0 20202020 636f6c6f 722e6120 2a3d2075 color.a *= u │ │ │ │ + 0x00d6e6b0 5f6f7061 63697479 3b200a20 20202076 _opacity; . v │ │ │ │ + 0x00d6e6c0 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ + 0x00d6e6d0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d6e6e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6e6f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6e700 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6e710 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6e720 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6e730 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6e740 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6e750 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6e760 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6e770 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6e780 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6e790 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6e7a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6e7b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6e7c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6e7d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6e7e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6e7f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6e800 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6e810 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6e820 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d6e830 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d6e840 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d6e850 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d6e860 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d6e870 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d6e880 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d6e890 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d6e8a0 23656e64 6966200a 2020696e 20666c6f #endif . in flo │ │ │ │ + 0x00d6e8b0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00d6e8c0 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00d6e8d0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d6e8e0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d6e8f0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d6e900 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d6e910 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d6e920 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d6e930 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d6e940 65633420 755f706f 73697469 6f6e3b20 ec4 u_position; │ │ │ │ + 0x00d6e950 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d6e960 755f6c69 6e655061 72616d73 3b200a20 u_lineParams; . │ │ │ │ + 0x00d6e970 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d6e980 5f616363 75726163 793b200a 2020756e _accuracy; . un │ │ │ │ + 0x00d6e990 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d6e9a0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d6e9b0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d6e9c0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d6e9d0 61742075 5f617a69 6d75743b 200a2020 at u_azimut; . │ │ │ │ + 0x00d6e9e0 636f6e73 7420666c 6f617420 6b416e74 const float kAnt │ │ │ │ + 0x00d6e9f0 69616c69 6173696e 67546872 6573686f ialiasingThresho │ │ │ │ + 0x00d6ea00 6c64203d 20302e39 323b200a 2020636f ld = 0.92; . co │ │ │ │ + 0x00d6ea10 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d6ea20 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d6ea30 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d6ea40 696e2829 200a2020 7b200a20 20236966 in() . { . #if │ │ │ │ + 0x00d6ea50 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00d6ea60 20202020 4c4f575f 50207665 63342063 LOW_P vec4 c │ │ │ │ + 0x00d6ea70 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ + 0x00d6ea80 0a202023 656c7365 200a2020 20204c4f . #else . LO │ │ │ │ + 0x00d6ea90 575f5020 76656334 20636f6c 6f72203d W_P vec4 color = │ │ │ │ + 0x00d6eaa0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d6eab0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00d6eac0 6f6f7264 293b200a 20202365 6e646966 oord); . #endif │ │ │ │ + 0x00d6ead0 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ + 0x00d6eae0 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00d6eaf0 20636f6c 6f722e61 202a3d20 28312e30 color.a *= (1.0 │ │ │ │ + 0x00d6eb00 202d2073 6d6f6f74 68737465 70286b41 - smoothstep(kA │ │ │ │ + 0x00d6eb10 6e746961 6c696173 696e6754 68726573 ntialiasingThres │ │ │ │ + 0x00d6eb20 686f6c64 2c20312e 302c2061 62732876 hold, 1.0, abs(v │ │ │ │ + 0x00d6eb30 5f6c656e 67746859 2929293b 200a2020 _lengthY))); . │ │ │ │ + 0x00d6eb40 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d6eb50 636f6c6f 723b200a 20207d20 0a000000 color; . } .... │ │ │ │ + 0x00d6eb60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6eb70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6eb80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6eb90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6eba0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6ebb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6ebc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6ebd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6ebe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6ebf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6ec00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6ec10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6ec20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6ec30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6ec40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6ec50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6ec60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6ec70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6ec80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6ec90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6eca0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6ecb0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d6ecc0 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d6ecd0 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ + 0x00d6ece0 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ + 0x00d6ecf0 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ + 0x00d6ed00 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d6ed10 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ + 0x00d6ed20 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d6ed30 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ + 0x00d6ed40 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d6ed50 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ + 0x00d6ed60 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d6ed70 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d6ed80 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d6ed90 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d6eda0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d6edb0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d6edc0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d6edd0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d6ede0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d6edf0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d6ee00 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d6ee10 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d6ee20 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d6ee30 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d6ee40 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d6ee50 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d6ee60 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d6ee70 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d6ee80 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d6ee90 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d6eea0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d6eeb0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d6eec0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d6eed0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d6eee0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d6eef0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d6ef00 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d6ef10 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d6ef20 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d6ef30 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d6ef40 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d6ef50 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d6ef60 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d6ef70 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d6ef80 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d6ef90 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d6efa0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d6efb0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d6efc0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d6efd0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d6efe0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d6eff0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d6f000 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d6f010 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d6f020 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d6f030 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d6f040 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d6f050 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d6f060 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d6f070 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d6f080 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d6f090 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d6f0a0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d6f0b0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d6f0c0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d6f0d0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d6f0e0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d6f0f0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d6f100 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d6f110 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d6f120 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d6f130 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d6f140 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d6f150 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d6f160 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d6f170 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d6f180 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d6f190 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d6f1a0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d6f1b0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d6f1c0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d6f1d0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d6f1e0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d6f1f0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d6f200 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d6f210 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d6f220 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d6f230 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d6f240 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d6f250 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d6f260 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d6f270 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d6f280 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d6f290 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d6f2a0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d6f2b0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d6f2c0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d6f2d0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d6f2e0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d6f2f0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d6f300 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d6f310 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ + 0x00d6f320 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ + 0x00d6f330 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ + 0x00d6f340 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ + 0x00d6f350 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ + 0x00d6f360 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ + 0x00d6f370 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ + 0x00d6f380 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d6f390 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ + 0x00d6f3a0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d6f3b0 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ + 0x00d6f3c0 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ + 0x00d6f3d0 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ + 0x00d6f3e0 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ + 0x00d6f3f0 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ + 0x00d6f400 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00d6f410 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00d6f420 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6f430 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6f440 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6f450 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6f460 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6f470 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6f480 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6f490 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6f4a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6f4b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6f4c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6f4d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6f4e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6f4f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6f500 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6f510 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6f520 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6f530 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6f540 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6f550 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6f560 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6f570 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d6f580 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d6f590 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00d6f5a0 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ + 0x00d6f5b0 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d6f5c0 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ + 0x00d6f5d0 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00d6f5e0 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00d6f5f0 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00d6f600 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00d6f610 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d6f620 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d6f630 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00d6f640 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00d6f650 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ + 0x00d6f660 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d6f670 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d6f680 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d6f690 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d6f6a0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d6f6b0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d6f6c0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d6f6d0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d6f6e0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d6f6f0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d6f700 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d6f710 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d6f720 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d6f730 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d6f740 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d6f750 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d6f760 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d6f770 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d6f780 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d6f790 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d6f7a0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d6f7b0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d6f7c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d6f7d0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d6f7e0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d6f7f0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d6f800 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d6f810 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d6f820 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d6f830 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d6f840 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d6f850 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d6f860 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d6f870 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d6f880 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d6f890 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d6f8a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d6f8b0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d6f8c0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d6f8d0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d6f8e0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d6f8f0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d6f900 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d6f910 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d6f920 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d6f930 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d6f940 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d6f950 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d6f960 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d6f970 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d6f980 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d6f990 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d6f9a0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d6f9b0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d6f9c0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d6f9d0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d6f9e0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d6f9f0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d6fa00 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d6fa10 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d6fa20 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d6fa30 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d6fa40 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d6fa50 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d6fa60 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d6fa70 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d6fa80 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d6fa90 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d6faa0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d6fab0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d6fac0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d6fad0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d6fae0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d6faf0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d6fb00 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d6fb10 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d6fb20 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d6fb30 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d6fb40 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d6fb50 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d6fb60 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d6fb70 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d6fb80 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d6fb90 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d6fba0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d6fbb0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d6fbc0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d6fbd0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d6fbe0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d6fbf0 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d6fc00 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ + 0x00d6fc10 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ + 0x00d6fc20 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ + 0x00d6fc30 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ + 0x00d6fc40 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ + 0x00d6fc50 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ + 0x00d6fc60 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ + 0x00d6fc70 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ + 0x00d6fc80 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ + 0x00d6fc90 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ + 0x00d6fca0 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ + 0x00d6fcb0 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ + 0x00d6fcc0 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ + 0x00d6fcd0 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ + 0x00d6fce0 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ + 0x00d6fcf0 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ + 0x00d6fd00 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ + 0x00d6fd10 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ + 0x00d6fd20 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ + 0x00d6fd30 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ + 0x00d6fd40 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00d6fd50 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00d6fd60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d6fd70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d6fd80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d6fd90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d6fda0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d6fdb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d6fdc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d6fdd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d6fde0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d6fdf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d6fe00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d6fe10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d6fe20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d6fe30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d6fe40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d6fe50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d6fe60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d6fe70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d6fe80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d6fe90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d6fea0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d6feb0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d6fec0 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00d6fed0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d6fee0 2020696e 20666c6f 61742076 5f68616c in float v_hal │ │ │ │ + 0x00d6fef0 664c656e 6774683b 200a2020 6f757420 fLength; . out │ │ │ │ + 0x00d6ff00 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00d6ff10 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d6ff20 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d6ff30 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d6ff40 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d6ff50 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d6ff60 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d6ff70 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d6ff80 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00d6ff90 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d6ffa0 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d6ffb0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d6ffc0 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00d6ffd0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d6ffe0 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00d6fff0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d70000 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00d70010 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d70020 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d70030 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d70040 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d70050 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d70060 32442075 5f6d6173 6b546578 3b200a20 2D u_maskTex; . │ │ │ │ + 0x00d70070 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00d70080 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00d70090 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00d700a0 6f6e7374 20666c6f 6174206b 4f75746c onst float kOutl │ │ │ │ + 0x00d700b0 696e6554 68726573 686f6c64 31203d20 ineThreshold1 = │ │ │ │ + 0x00d700c0 302e383b 200a2020 636f6e73 7420666c 0.8; . const fl │ │ │ │ + 0x00d700d0 6f617420 6b4f7574 6c696e65 54687265 oat kOutlineThre │ │ │ │ + 0x00d700e0 73686f6c 6432203d 20302e35 3b200a20 shold2 = 0.5; . │ │ │ │ + 0x00d700f0 20636f6e 73742066 6c6f6174 206b4d61 const float kMa │ │ │ │ + 0x00d70100 736b4f70 61636974 79203d20 302e373b skOpacity = 0.7; │ │ │ │ + 0x00d70110 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d70120 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d70130 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d70140 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d70150 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ + 0x00d70160 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ + 0x00d70170 72546578 2c20765f 636f6c6f 72546578 rTex, v_colorTex │ │ │ │ + 0x00d70180 436f6f72 64293b20 0a202020 20666c6f Coord); . flo │ │ │ │ + 0x00d70190 61742061 6c706861 436f6465 203d2063 at alphaCode = c │ │ │ │ + 0x00d701a0 6f6c6f72 2e613b20 0a202020 20766563 olor.a; . vec │ │ │ │ + 0x00d701b0 34206d61 736b203d 20746578 74757265 4 mask = texture │ │ │ │ + 0x00d701c0 28755f6d 61736b54 65782c20 765f6d61 (u_maskTex, v_ma │ │ │ │ + 0x00d701d0 736b5465 78436f6f 7264293b 200a2020 skTexCoord); . │ │ │ │ + 0x00d701e0 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ + 0x00d701f0 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ + 0x00d70200 6d6f6f74 68737465 70286b41 6e746961 moothstep(kAntia │ │ │ │ + 0x00d70210 6c696173 696e6754 68726573 686f6c64 liasingThreshold │ │ │ │ + 0x00d70220 2c20312e 302c2061 62732876 5f68616c , 1.0, abs(v_hal │ │ │ │ + 0x00d70230 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ + 0x00d70240 20636f6c 6f722e72 6762203d 206d6978 color.rgb = mix │ │ │ │ + 0x00d70250 28636f6c 6f722e72 67622c20 6d61736b (color.rgb, mask │ │ │ │ + 0x00d70260 2e726762 202a206d 69782875 5f6c6967 .rgb * mix(u_lig │ │ │ │ + 0x00d70270 68744172 726f7743 6f6c6f72 2e726762 htArrowColor.rgb │ │ │ │ + 0x00d70280 2c20755f 6461726b 4172726f 77436f6c , u_darkArrowCol │ │ │ │ + 0x00d70290 6f722e72 67622c20 73746570 28616c70 or.rgb, step(alp │ │ │ │ + 0x00d702a0 6861436f 64652c20 302e3629 292c206d haCode, 0.6)), m │ │ │ │ + 0x00d702b0 61736b2e 61202a20 6b4d6173 6b4f7061 ask.a * kMaskOpa │ │ │ │ + 0x00d702c0 63697479 293b200a 20202020 69662028 city); . if ( │ │ │ │ + 0x00d702d0 755f6f75 746c696e 65203e20 302e3029 u_outline > 0.0) │ │ │ │ + 0x00d702e0 200a2020 20207b20 0a202020 20202063 . { . c │ │ │ │ + 0x00d702f0 6f6c6f72 2e726762 203d206d 69782863 olor.rgb = mix(c │ │ │ │ + 0x00d70300 6f6c6f72 2e726762 2c20755f 6f75746c olor.rgb, u_outl │ │ │ │ + 0x00d70310 696e6543 6f6c6f72 2e726762 2c207374 ineColor.rgb, st │ │ │ │ + 0x00d70320 6570286b 4f75746c 696e6554 68726573 ep(kOutlineThres │ │ │ │ + 0x00d70330 686f6c64 312c2061 62732876 5f68616c hold1, abs(v_hal │ │ │ │ + 0x00d70340 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ + 0x00d70350 20202063 6f6c6f72 2e726762 203d206d color.rgb = m │ │ │ │ + 0x00d70360 69782863 6f6c6f72 2e726762 2c20755f ix(color.rgb, u_ │ │ │ │ + 0x00d70370 6f75746c 696e6543 6f6c6f72 2e726762 outlineColor.rgb │ │ │ │ + 0x00d70380 2c20736d 6f6f7468 73746570 286b4f75 , smoothstep(kOu │ │ │ │ + 0x00d70390 746c696e 65546872 6573686f 6c64322c tlineThreshold2, │ │ │ │ + 0x00d703a0 206b4f75 746c696e 65546872 6573686f kOutlineThresho │ │ │ │ + 0x00d703b0 6c64312c 20616273 28765f68 616c664c ld1, abs(v_halfL │ │ │ │ + 0x00d703c0 656e6774 68292929 3b200a20 2020207d ength))); . } │ │ │ │ + 0x00d703d0 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ + 0x00d703e0 72203d20 636f6c6f 723b200a 20207d20 r = color; . } │ │ │ │ + 0x00d703f0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d70400 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d70410 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d70420 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d70430 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d70440 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d70450 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d70460 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d70470 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d70480 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d70490 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d704a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d704b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d704c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d704d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d704e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d704f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d70500 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d70510 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d70520 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d70530 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d70540 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d70550 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d70560 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d70570 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d70580 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00d70590 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00d705a0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00d705b0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d705c0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d705d0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00d705e0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00d705f0 673b200a 2020636f 6e737420 76656333 g; . const vec3 │ │ │ │ + 0x00d70600 206c6967 68744469 72203d20 76656333 lightDir = vec3 │ │ │ │ + 0x00d70610 28302e33 31362c20 302e302c 20302e39 (0.316, 0.0, 0.9 │ │ │ │ + 0x00d70620 3438293b 200a2020 636f6e73 7420666c 48); . const fl │ │ │ │ + 0x00d70630 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d70640 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d70650 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d70660 20207b20 0a202020 20666c6f 61742070 { . float p │ │ │ │ + 0x00d70670 686f6e67 44696666 75736520 3d206d61 hongDiffuse = ma │ │ │ │ + 0x00d70680 7828302e 302c202d 646f7428 6c696768 x(0.0, -dot(ligh │ │ │ │ + 0x00d70690 74446972 2c20765f 6e6f726d 616c2929 tDir, v_normal)) │ │ │ │ + 0x00d706a0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00d706b0 6f72203d 20766563 34282870 686f6e67 or = vec4((phong │ │ │ │ + 0x00d706c0 44696666 75736520 2a20302e 35202b20 Diffuse * 0.5 + │ │ │ │ + 0x00d706d0 302e3529 202a2075 5f636f6c 6f722e72 0.5) * u_color.r │ │ │ │ + 0x00d706e0 67622c20 755f636f 6c6f722e 61293b20 gb, u_color.a); │ │ │ │ + 0x00d706f0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d70700 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d70710 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d70720 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d70730 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d70740 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d70750 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d70760 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d70770 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d70780 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d70790 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d707a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d707b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d707c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d707d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d707e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d707f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d70800 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d70810 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d70820 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d70830 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d70840 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d70850 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d70860 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d70870 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d70880 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d70890 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ + 0x00d708a0 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ + 0x00d708b0 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ + 0x00d708c0 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ + 0x00d708d0 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00d708e0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d708f0 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ + 0x00d70900 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ + 0x00d70910 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00d70920 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d70930 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d70940 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d70950 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d70960 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d70970 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d70980 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00d70990 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d709a0 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00d709b0 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00d709c0 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00d709d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d709e0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d709f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d70a00 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d70a10 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00d70a20 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ + 0x00d70a30 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ + 0x00d70a40 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d70a50 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ + 0x00d70a60 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ + 0x00d70a70 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ + 0x00d70a80 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ + 0x00d70a90 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d70aa0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d70ab0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d70ac0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d70ad0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d70ae0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d70af0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d70b00 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d70b10 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d70b20 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d70b30 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d70b40 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d70b50 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d70b60 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d70b70 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d70b80 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d70b90 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d70ba0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d70bb0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d70bc0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d70bd0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d70be0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d70bf0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d70c00 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d70c10 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d70c20 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d70c30 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d70c40 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d70c50 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d70c60 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d70c70 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d70c80 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d70c90 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d70ca0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d70cb0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d70cc0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d70cd0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d70ce0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d70cf0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d70d00 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d70d10 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d70d20 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d70d30 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d70d40 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d70d50 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d70d60 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d70d70 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d70d80 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d70d90 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d70da0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d70db0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d70dc0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d70dd0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d70de0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d70df0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d70e00 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d70e10 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d70e20 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d70e30 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d70e40 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d70e50 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d70e60 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d70e70 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d70e80 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d70e90 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d70ea0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d70eb0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d70ec0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d70ed0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d70ee0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d70ef0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d70f00 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d70f10 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d70f20 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d70f30 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d70f40 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d70f50 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d70f60 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d70f70 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d70f80 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d70f90 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d70fa0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d70fb0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d70fc0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d70fd0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d70fe0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d70ff0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d71000 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d71010 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d71020 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d71030 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00d71040 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00d71050 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00d71060 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00d71070 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00d71080 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ + 0x00d71090 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ + 0x00d710a0 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ + 0x00d710b0 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ + 0x00d710c0 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ + 0x00d710d0 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00d710e0 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00d710f0 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ + 0x00d71100 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ + 0x00d71110 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ + 0x00d71120 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ + 0x00d71130 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d71140 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ + 0x00d71150 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00d71160 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ + 0x00d71170 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d71180 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d71190 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d711a0 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ + 0x00d711b0 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ + 0x00d711c0 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ + 0x00d711d0 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ + 0x00d711e0 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ + 0x00d711f0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00d71200 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ + 0x00d71210 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ + 0x00d71220 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ + 0x00d71230 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ + 0x00d71240 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ + 0x00d71250 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ + 0x00d71260 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ + 0x00d71270 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00d71280 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00d71290 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d712a0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d712b0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d712c0 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ + 0x00d712d0 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ + 0x00d712e0 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ + 0x00d712f0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00d71300 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00d71310 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00d71320 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d71330 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d71340 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00d71350 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d71360 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00d71370 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d71380 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d71390 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d713a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d713b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d713c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d713d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d713e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d713f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d71400 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d71410 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d71420 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d71430 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d71440 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d71450 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d71460 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d71470 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d71480 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d71490 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d714a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d714b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d714c0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00d714d0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d714e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d714f0 20755f63 6f6c6f72 3b200a20 20636f6e u_color; . con │ │ │ │ + 0x00d71500 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d71510 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d71520 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d71530 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ + 0x00d71540 46726167 436f6c6f 72203d20 755f636f FragColor = u_co │ │ │ │ + 0x00d71550 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00d71560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d71570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d71580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d71590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d715a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d715b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d715c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d715d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d715e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d715f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d71600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d71610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d71620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d71630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d71640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d71650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d71660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d71670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d71680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d71690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d716a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d716b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d716c0 7264733b 200a2020 696e2076 65633220 rds; . in vec2 │ │ │ │ + 0x00d716d0 765f6d61 736b5465 78436f6f 7264733b v_maskTexCoords; │ │ │ │ + 0x00d716e0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d716f0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d71700 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d71710 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d71720 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d71730 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d71740 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d71750 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d71760 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d71770 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d71780 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d71790 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d717a0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d717b0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d717c0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d717d0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d717e0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d717f0 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00d71800 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00d71810 65783b20 0a202075 6e69666f 726d2073 ex; . uniform s │ │ │ │ + 0x00d71820 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00d71830 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d71840 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d71850 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d71860 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d71870 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ + 0x00d71880 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ + 0x00d71890 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d718a0 636f6c6f 72546578 436f6f72 64732920 colorTexCoords) │ │ │ │ + 0x00d718b0 2a207465 78747572 6528755f 6d61736b * texture(u_mask │ │ │ │ + 0x00d718c0 5465782c 20765f6d 61736b54 6578436f Tex, v_maskTexCo │ │ │ │ + 0x00d718d0 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ + 0x00d718e0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ + 0x00d718f0 61636974 793b200a 20202020 765f4672 acity; . v_Fr │ │ │ │ + 0x00d71900 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d71910 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ 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 │ │ │ │ @@ -60322,2319 +60322,2319 @@ │ │ │ │ 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; . } │ │ │ │ + 0x00d71a60 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ + 0x00d71a70 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ + 0x00d71a80 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ + 0x00d71a90 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ + 0x00d71aa0 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ + 0x00d71ab0 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ + 0x00d71ac0 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ + 0x00d71ad0 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ + 0x00d71ae0 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ + 0x00d71af0 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ + 0x00d71b00 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ + 0x00d71b10 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ + 0x00d71b20 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d71b30 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d71b40 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d71b50 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d71b60 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d71b70 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d71b80 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d71b90 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d71ba0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d71bb0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d71bc0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d71bd0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d71be0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d71bf0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d71c00 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d71c10 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d71c20 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d71c30 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d71c40 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d71c50 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d71c60 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d71c70 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d71c80 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d71c90 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d71ca0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d71cb0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d71cc0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d71cd0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d71ce0 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d71cf0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d71d00 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d71d10 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d71d20 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d71d30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d71d40 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d71d50 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d71d60 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d71d70 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d71d80 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d71d90 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d71da0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d71db0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d71dc0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d71dd0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d71de0 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d71df0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d71e00 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d71e10 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d71e20 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d71e30 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d71e40 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d71e50 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d71e60 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d71e70 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d71e80 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d71e90 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d71ea0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d71eb0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d71ec0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d71ed0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d71ee0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d71ef0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d71f00 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d71f10 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d71f20 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d71f30 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d71f40 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d71f50 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d71f60 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d71f70 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d71f80 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d71f90 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d71fa0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d71fb0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d71fc0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d71fd0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d71fe0 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d71ff0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d72000 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d72010 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d72020 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d72030 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d72040 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d72050 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d72060 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d72070 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d72080 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d72090 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d720a0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d720b0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d720c0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d720d0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d720e0 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d720f0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d72100 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d72110 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d72120 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ + 0x00d72130 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ + 0x00d72140 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ + 0x00d72150 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ + 0x00d72160 293b200a 2020200a 20202020 76656334 ); . . vec4 │ │ │ │ + 0x00d72170 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ + 0x00d72180 78203d20 755f7469 6c65436f 6f726473 x = u_tileCoords │ │ │ │ + 0x00d72190 4d696e4d 61785b67 6c5f496e 7374616e MinMax[gl_Instan │ │ │ │ + 0x00d721a0 63654944 5d3b200a 20202020 76656332 ceID]; . vec2 │ │ │ │ + 0x00d721b0 20776f72 6c64506f 73203d20 6d697828 worldPos = mix( │ │ │ │ + 0x00d721c0 74696c65 436f6f72 64734d69 6e4d6178 tileCoordsMinMax │ │ │ │ + 0x00d721d0 2e78792c 2074696c 65436f6f 7264734d .xy, tileCoordsM │ │ │ │ + 0x00d721e0 696e4d61 782e7a77 2c207175 61645665 inMax.zw, quadVe │ │ │ │ + 0x00d721f0 72746578 293b200a 20202020 76656334 rtex); . vec4 │ │ │ │ + 0x00d72200 20706f73 203d2076 65633428 776f726c pos = vec4(worl │ │ │ │ + 0x00d72210 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d72220 2a20755f 6d6f6465 6c566965 77202a20 * u_modelView * │ │ │ │ + 0x00d72230 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d72240 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d72250 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d72260 666f726d 28706f73 2c20755f 7069766f form(pos, u_pivo │ │ │ │ + 0x00d72270 74547261 6e73666f 726d2c20 302e3029 tTransform, 0.0) │ │ │ │ + 0x00d72280 3b200a20 20200a20 20202076 5f746578 ; . . v_tex │ │ │ │ + 0x00d72290 436f6f72 6473203d 20766563 33287175 Coords = vec3(qu │ │ │ │ + 0x00d722a0 61645665 72746578 2c20666c 6f617428 adVertex, float( │ │ │ │ + 0x00d722b0 755f7465 78747572 65496e64 65785b67 u_textureIndex[g │ │ │ │ + 0x00d722c0 6c5f496e 7374616e 63654944 5d29293b l_InstanceID])); │ │ │ │ + 0x00d722d0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d722e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d722f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d72300 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d72310 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d72320 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d72330 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d72340 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d72350 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d72360 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d72370 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d72380 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d72390 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d723a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d723b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d723c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d723d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d723e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d723f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d72400 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d72410 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d72420 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d72430 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d72440 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d72450 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d72460 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00d72470 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00d72480 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00d72490 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d724a0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00d724b0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00d724c0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00d724d0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00d724e0 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00d724f0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d72500 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00d72510 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d72520 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d72530 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d72540 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d72550 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d72560 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d72570 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d72580 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d72590 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d725a0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d725b0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d725c0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d725d0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d725e0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d725f0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d72600 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d72610 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ + 0x00d72620 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ + 0x00d72630 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ + 0x00d72640 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d72650 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d72660 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00d72670 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00d72680 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d72690 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d726a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d726b0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00d726c0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d726d0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d726e0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00d726f0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d72700 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00d72710 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00d72720 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00d72730 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00d72740 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00d72750 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00d72760 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d72770 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00d72780 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d72790 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00d727a0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00d727b0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00d727c0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00d727d0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00d727e0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00d727f0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d72800 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00d72810 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00d72820 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d72830 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00d72840 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00d72850 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00d72860 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00d72870 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d72880 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d72890 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d728a0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00d728b0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00d728c0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00d728d0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00d728e0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d728f0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d72900 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d72910 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00d72920 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00d72930 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00d72940 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00d72950 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00d72960 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00d72970 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d72980 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00d72990 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00d729a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d729b0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00d729c0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00d729d0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00d729e0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00d729f0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d72a00 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00d72a10 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00d72a20 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00d72a30 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00d72a40 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00d72a50 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d72a60 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00d72a70 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00d72a80 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d72a90 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00d72aa0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d72ab0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00d72ac0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00d72ad0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00d72ae0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00d72af0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00d72b00 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00d72b10 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00d72b20 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00d72b30 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00d72b40 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00d72b50 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00d72b60 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00d72b70 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00d72b80 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00d72b90 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00d72ba0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00d72bb0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d72bc0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00d72bd0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00d72be0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d72bf0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00d72c00 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ + 0x00d72c10 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ + 0x00d72c20 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ + 0x00d72c30 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ + 0x00d72c40 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ + 0x00d72c50 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d72c60 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d72c70 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ + 0x00d72c80 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00d72c90 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d72ca0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d72cb0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00d72cc0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00d72cd0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00d72ce0 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00d72cf0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00d72d00 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d72d10 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00d72d20 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d72d30 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ + 0x00d72d40 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ + 0x00d72d50 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d72d60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d72d70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d72d80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d72d90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d72da0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d72db0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d72dc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d72dd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d72de0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d72df0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d72e00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d72e10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d72e20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d72e30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d72e40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d72e50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d72e60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d72e70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d72e80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d72e90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d72ea0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d72eb0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d72ec0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d72ed0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d72ee0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d72ef0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d72f00 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00d72f10 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ + 0x00d72f20 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ + 0x00d72f30 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d72f40 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d72f50 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d72f60 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d72f70 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d72f80 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d72f90 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ + 0x00d72fa0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d72fb0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00d72fc0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d72fd0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ + 0x00d72fe0 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00d72ff0 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ + 0x00d73000 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d73010 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ + 0x00d73020 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d73030 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d73040 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d73050 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d73060 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d73070 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d73080 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d73090 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d730a0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d730b0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d730c0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d730d0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d730e0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d730f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d73100 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d73110 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d73120 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d73130 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d73140 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d73150 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d73160 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d73170 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d73180 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d73190 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d731a0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d731b0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d731c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d731d0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d731e0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d731f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d73200 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d73210 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d73220 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d73230 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d73240 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d73250 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d73260 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d73270 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d73280 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d73290 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d732a0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d732b0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d732c0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d732d0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d732e0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d732f0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d73300 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d73310 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d73320 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d73330 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d73340 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d73350 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d73360 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d73370 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d73380 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d73390 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d733a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d733b0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d733c0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d733d0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d733e0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d733f0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d73400 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d73410 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d73420 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d73430 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d73440 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d73450 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d73460 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d73470 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d73480 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d73490 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d734a0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d734b0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d734c0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d734d0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d734e0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d734f0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d73500 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d73510 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d73520 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d73530 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d73540 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d73550 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d73560 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d73570 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d73580 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d73590 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d735a0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d735b0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d735c0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d735d0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d735e0 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ + 0x00d735f0 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ + 0x00d73600 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ + 0x00d73610 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ + 0x00d73620 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ + 0x00d73630 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ + 0x00d73640 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d73650 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ + 0x00d73660 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ + 0x00d73670 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ + 0x00d73680 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ + 0x00d73690 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00d736a0 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ + 0x00d736b0 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ + 0x00d736c0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00d736d0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d736e0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00d736f0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00d73700 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00d73710 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ + 0x00d73720 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ + 0x00d73730 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ + 0x00d73740 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d73750 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ + 0x00d73760 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ + 0x00d73770 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d73780 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ + 0x00d73790 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ + 0x00d737a0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d737b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d737c0 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00d737d0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ + 0x00d737e0 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ + 0x00d737f0 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ + 0x00d73800 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ + 0x00d73810 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ + 0x00d73820 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ + 0x00d73830 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ + 0x00d73840 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ + 0x00d73850 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d73860 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ + 0x00d73870 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ + 0x00d73880 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ + 0x00d73890 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ + 0x00d738a0 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ + 0x00d738b0 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ + 0x00d738c0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d738d0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d738e0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d738f0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d73900 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d73910 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d73920 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d73930 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d73940 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d73950 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d73960 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d73970 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d73980 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d73990 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d739a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d739b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d739c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d739d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d739e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d739f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d73a00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d73a10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d73a20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d73a30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d73a40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d73a50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d73a60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d73a70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d73a80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d73a90 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d73aa0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d73ab0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d73ac0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d73ad0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d73ae0 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00d73af0 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ + 0x00d73b00 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ + 0x00d73b10 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ + 0x00d73b20 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ + 0x00d73b30 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d73b40 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d73b50 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d73b60 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d73b70 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d73b80 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d73b90 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ + 0x00d73ba0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d73bb0 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ + 0x00d73bc0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d73bd0 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ + 0x00d73be0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d73bf0 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ + 0x00d73c00 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d73c10 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ + 0x00d73c20 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00d73c30 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ + 0x00d73c40 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ + 0x00d73c50 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ + 0x00d73c60 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d73c70 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d73c80 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d73c90 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d73ca0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d73cb0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d73cc0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d73cd0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d73ce0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d73cf0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d73d00 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d73d10 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d73d20 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d73d30 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d73d40 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d73d50 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d73d60 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d73d70 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d73d80 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d73d90 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d73da0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d73db0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d73dc0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d73dd0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d73de0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d73df0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d73e00 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d73e10 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d73e20 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d73e30 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d73e40 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d73e50 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d73e60 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d73e70 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d73e80 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d73e90 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d73ea0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d73eb0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d73ec0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d73ed0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d73ee0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d73ef0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d73f00 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d73f10 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d73f20 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d73f30 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d73f40 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d73f50 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d73f60 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d73f70 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d73f80 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d73f90 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d73fa0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d73fb0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d73fc0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d73fd0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d73fe0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d73ff0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d74000 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d74010 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d74020 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d74030 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d74040 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d74050 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d74060 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d74070 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d74080 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d74090 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d740a0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d740b0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d740c0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d740d0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d740e0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d740f0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d74100 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d74110 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d74120 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d74130 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d74140 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d74150 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d74160 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d74170 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d74180 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d74190 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d741a0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d741b0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d741c0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d741d0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d741e0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d741f0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d74200 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ + 0x00d74210 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ + 0x00d74220 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00d74230 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00d74240 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00d74250 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00d74260 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00d74270 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d74280 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00d74290 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00d742a0 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00d742b0 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ + 0x00d742c0 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ + 0x00d742d0 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ + 0x00d742e0 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ + 0x00d742f0 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ + 0x00d74300 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d74310 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ + 0x00d74320 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d74330 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d74340 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00d74350 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d74360 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00d74370 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ + 0x00d74380 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d74390 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d743a0 20202020 20202020 20202020 20755f6d u_m │ │ │ │ + 0x00d743b0 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ + 0x00d743c0 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ + 0x00d743d0 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ + 0x00d743e0 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ + 0x00d743f0 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ + 0x00d74400 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ + 0x00d74410 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ + 0x00d74420 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ + 0x00d74430 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ + 0x00d74440 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d74450 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ + 0x00d74460 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ + 0x00d74470 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ + 0x00d74480 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ + 0x00d74490 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ + 0x00d744a0 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ + 0x00d744b0 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ + 0x00d744c0 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ + 0x00d744d0 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ + 0x00d744e0 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ + 0x00d744f0 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d74500 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ + 0x00d74510 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ + 0x00d74520 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ + 0x00d74530 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ + 0x00d74540 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ + 0x00d74550 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ + 0x00d74560 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00d74570 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ + 0x00d74580 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d74590 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ + 0x00d745a0 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ + 0x00d745b0 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ + 0x00d745c0 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ + 0x00d745d0 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ + 0x00d745e0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d745f0 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ + 0x00d74600 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d74610 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d74620 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d74630 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d74640 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d74650 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d74660 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d74670 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d74680 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d74690 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d746a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d746b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d746c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d746d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d746e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d746f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d74700 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d74710 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d74720 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d74730 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d74740 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d74750 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d74760 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d74770 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ + 0x00d74780 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ + 0x00d74790 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ + 0x00d747a0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d747b0 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ + 0x00d747c0 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00d747d0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d747e0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d747f0 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ + 0x00d74800 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ + 0x00d74810 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00d74820 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d74830 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d74840 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d74850 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d74860 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d74870 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d74880 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d74890 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d748a0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d748b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d748c0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d748d0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d748e0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d748f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d74900 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d74910 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ + 0x00d74920 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ + 0x00d74930 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00d74940 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ + 0x00d74950 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d74960 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d74970 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d74980 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d74990 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d749a0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d749b0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d749c0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d749d0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d749e0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d749f0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d74a00 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d74a10 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d74a20 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d74a30 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d74a40 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d74a50 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d74a60 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d74a70 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d74a80 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d74a90 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d74aa0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d74ab0 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d74ac0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d74ad0 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d74ae0 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d74af0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d74b00 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d74b10 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d74b20 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d74b30 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d74b40 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d74b50 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d74b60 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d74b70 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d74b80 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d74b90 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d74ba0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d74bb0 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d74bc0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d74bd0 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d74be0 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d74bf0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d74c00 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d74c10 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d74c20 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d74c30 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d74c40 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d74c50 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d74c60 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d74c70 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d74c80 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d74c90 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d74ca0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d74cb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d74cc0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d74cd0 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d74ce0 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d74cf0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d74d00 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d74d10 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d74d20 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d74d30 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d74d40 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d74d50 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d74d60 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d74d70 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d74d80 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d74d90 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d74da0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d74db0 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d74dc0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d74dd0 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d74de0 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d74df0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d74e00 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d74e10 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d74e20 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d74e30 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d74e40 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d74e50 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d74e60 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d74e70 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d74e80 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d74e90 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d74ea0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d74eb0 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d74ec0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d74ed0 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d74ee0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d74ef0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d74f00 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d74f10 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ + 0x00d74f20 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d74f30 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d74f40 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ + 0x00d74f50 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ + 0x00d74f60 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00d74f70 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00d74f80 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00d74f90 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00d74fa0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00d74fb0 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ + 0x00d74fc0 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ + 0x00d74fd0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d74fe0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d74ff0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d75000 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ + 0x00d75010 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ + 0x00d75020 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00d75030 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d75040 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d75050 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d75060 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d75070 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d75080 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d75090 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d750a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d750b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d750c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d750d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d750e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d750f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d75100 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d75110 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d75120 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d75130 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d75140 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d75150 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d75160 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d75170 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d75180 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d75190 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d751a0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d751b0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d751c0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d751d0 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ + 0x00d751e0 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ + 0x00d751f0 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ + 0x00d75200 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d75210 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d75220 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d75230 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d75240 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d75250 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d75260 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ + 0x00d75270 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ + 0x00d75280 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ + 0x00d75290 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d752a0 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ + 0x00d752b0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d752c0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d752d0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00d752e0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d752f0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d75300 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d75310 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d75320 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00d75330 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d75340 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00d75350 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00d75360 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00d75370 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d75380 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00d75390 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d753a0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d753b0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d753c0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00d753d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d753e0 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00d753f0 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00d75400 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d75410 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00d75420 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00d75430 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00d75440 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d75450 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00d75460 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00d75470 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00d75480 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00d75490 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d754a0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00d754b0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00d754c0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00d754d0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d754e0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d754f0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d75500 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d75510 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00d75520 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00d75530 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00d75540 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00d75550 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d75560 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00d75570 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00d75580 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d75590 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00d755a0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00d755b0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d755c0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00d755d0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00d755e0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d755f0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d75600 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00d75610 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00d75620 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00d75630 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00d75640 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00d75650 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00d75660 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d75670 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00d75680 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d75690 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00d756a0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00d756b0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00d756c0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d756d0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00d756e0 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00d756f0 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00d75700 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00d75710 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00d75720 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00d75730 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00d75740 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00d75750 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00d75760 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00d75770 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00d75780 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d75790 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00d757a0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d757b0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00d757c0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00d757d0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d757e0 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00d757f0 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00d75800 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00d75810 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d75820 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d75830 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00d75840 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00d75850 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ + 0x00d75860 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ + 0x00d75870 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00d75880 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ + 0x00d75890 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ + 0x00d758a0 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ + 0x00d758b0 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ + 0x00d758c0 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ + 0x00d758d0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d758e0 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ + 0x00d758f0 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ + 0x00d75900 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ + 0x00d75910 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ + 0x00d75920 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ + 0x00d75930 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ + 0x00d75940 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ + 0x00d75950 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ + 0x00d75960 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ + 0x00d75970 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ + 0x00d75980 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d75990 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d759a0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d759b0 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ + 0x00d759c0 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ + 0x00d759d0 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ + 0x00d759e0 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ + 0x00d759f0 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ + 0x00d75a00 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ + 0x00d75a10 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ + 0x00d75a20 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ + 0x00d75a30 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ + 0x00d75a40 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d75a50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d75a60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d75a70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d75a80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d75a90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d75aa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d75ab0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d75ac0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d75ad0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d75ae0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d75af0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d75b00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d75b10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d75b20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d75b30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d75b40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d75b50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d75b60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d75b70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d75b80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d75b90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d75ba0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d75bb0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d75bc0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d75bd0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d75be0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d75bf0 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ + 0x00d75c00 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d75c10 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d75c20 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d75c30 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d75c40 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d75c50 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d75c60 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d75c70 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d75c80 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ + 0x00d75c90 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d75ca0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00d75cb0 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ + 0x00d75cc0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d75cd0 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ + 0x00d75ce0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d75cf0 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ + 0x00d75d00 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d75d10 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ + 0x00d75d20 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d75d30 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ + 0x00d75d40 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ + 0x00d75d50 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ + 0x00d75d60 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d75d70 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ + 0x00d75d80 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d75d90 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ + 0x00d75da0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d75db0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d75dc0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d75dd0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d75de0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d75df0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d75e00 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d75e10 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d75e20 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d75e30 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d75e40 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d75e50 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d75e60 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d75e70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d75e80 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d75e90 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d75ea0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d75eb0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d75ec0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d75ed0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d75ee0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d75ef0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d75f00 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d75f10 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d75f20 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d75f30 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d75f40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d75f50 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d75f60 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d75f70 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d75f80 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d75f90 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d75fa0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d75fb0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d75fc0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d75fd0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d75fe0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d75ff0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d76000 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d76010 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d76020 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d76030 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d76040 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d76050 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d76060 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d76070 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d76080 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d76090 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d760a0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d760b0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d760c0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d760d0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d760e0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d760f0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d76100 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d76110 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d76120 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d76130 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d76140 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d76150 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d76160 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d76170 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d76180 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d76190 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d761a0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d761b0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d761c0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d761d0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d761e0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d761f0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d76200 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d76210 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d76220 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d76230 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d76240 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d76250 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d76260 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d76270 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d76280 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d76290 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d762a0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d762b0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d762c0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d762d0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d762e0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d762f0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d76300 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d76310 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d76320 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d76330 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d76340 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d76350 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d76360 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ + 0x00d76370 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ + 0x00d76380 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00d76390 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ + 0x00d763a0 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ + 0x00d763b0 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ + 0x00d763c0 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ + 0x00d763d0 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ + 0x00d763e0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d763f0 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ + 0x00d76400 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ + 0x00d76410 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ + 0x00d76420 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ + 0x00d76430 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ + 0x00d76440 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ + 0x00d76450 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ + 0x00d76460 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ + 0x00d76470 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d76480 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ + 0x00d76490 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ + 0x00d764a0 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ + 0x00d764b0 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ + 0x00d764c0 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ + 0x00d764d0 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ + 0x00d764e0 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ + 0x00d764f0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00d76500 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00d76510 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d76520 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d76530 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00d76540 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d76550 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ + 0x00d76560 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ + 0x00d76570 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ + 0x00d76580 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d76590 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d765a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d765b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d765c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d765d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d765e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d765f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d76600 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d76610 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d76620 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d76630 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d76640 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d76650 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d76660 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d76670 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d76680 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d76690 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d766a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d766b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d766c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d766d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d766e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d766f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d76700 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00d76710 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d76720 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d76730 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00d76740 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d76750 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d76760 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d76770 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d76780 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d76790 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d767a0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d767b0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d767c0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d767d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d767e0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d767f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d76800 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d76810 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d76820 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d76830 200a2020 756e6966 6f726d20 73616d70 . uniform samp │ │ │ │ + 0x00d76840 6c657232 4420755f 636f6c6f 72546578 ler2D u_colorTex │ │ │ │ + 0x00d76850 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00d76860 706c6572 32442075 5f6d6173 6b546578 pler2D u_maskTex │ │ │ │ + 0x00d76870 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d76880 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d76890 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d768a0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d768b0 200a2020 20207665 63342063 6f6c6f72 . vec4 color │ │ │ │ + 0x00d768c0 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ + 0x00d768d0 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ + 0x00d768e0 78436f6f 7264293b 200a2020 2020666c xCoord); . fl │ │ │ │ + 0x00d768f0 6f617420 6d61736b 203d2074 65787475 oat mask = textu │ │ │ │ + 0x00d76900 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ + 0x00d76910 6d61736b 54657843 6f6f7264 292e723b maskTexCoord).r; │ │ │ │ + 0x00d76920 200a2020 2020636f 6c6f722e 61203d20 . color.a = │ │ │ │ + 0x00d76930 636f6c6f 722e6120 2a206d61 736b202a color.a * mask * │ │ │ │ + 0x00d76940 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00d76950 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ + 0x00d76960 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d76970 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d76980 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d76990 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d769a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d769b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d769c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d769d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d769e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d769f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d76a00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d76a10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d76a20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d76a30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d76a40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d76a50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d76a60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d76a70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d76a80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d76a90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d76aa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d76ab0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d76ac0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d76ad0 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d76ae0 6f6c6f72 5465783b 200a2020 696e2076 olorTex; . in v │ │ │ │ + 0x00d76af0 65633320 765f7465 78436f6f 7264733b ec3 v_texCoords; │ │ │ │ + 0x00d76b00 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d76b10 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00d76b20 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d76b30 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d76b40 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d76b50 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ + 0x00d76b60 46726167 436f6c6f 72203d20 74657874 FragColor = text │ │ │ │ + 0x00d76b70 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d76b80 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ + 0x00d76b90 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d76ba0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d76bb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d76bc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d76bd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d76be0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d76bf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d76c00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d76c10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d76c20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d76c30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d76c40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d76c50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d76c60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d76c70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d76c80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d76c90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d76ca0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d76cb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d76cc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d76cd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d76ce0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d76cf0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d76d00 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d76d10 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d76d20 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d76d30 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d76d40 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d76d50 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d76d60 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00d76d70 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00d76d80 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00d76d90 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d76da0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d76db0 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00d76dc0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d76dd0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d76de0 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00d76df0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d76e00 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00d76e10 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d76e20 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d76e30 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ + 0x00d76e40 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d76e50 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00d76e60 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00d76e70 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00d76e80 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ + 0x00d76e90 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ + 0x00d76ea0 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ + 0x00d76eb0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d76ec0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d76ed0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d76ee0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d76ef0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d76f00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d76f10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d76f20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d76f30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d76f40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d76f50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d76f60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d76f70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d76f80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d76f90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d76fa0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d76fb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d76fc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d76fd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d76fe0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d76ff0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d77000 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d77010 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d77020 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d77030 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d77040 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d77050 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d77060 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d77070 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d77080 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d77090 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d770a0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d770b0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d770c0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d770d0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d770e0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d770f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d77100 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d77110 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d77120 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d77130 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d77140 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d77150 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d77160 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d77170 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d77180 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d77190 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d771a0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d771b0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d771c0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d771d0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d771e0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d771f0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d77200 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d77210 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d77220 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00d77230 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00d77240 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d77250 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ + 0x00d77260 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ + 0x00d77270 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d77280 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d77290 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d772a0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d772b0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d772c0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d772d0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d772e0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d772f0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d77300 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d77310 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d77320 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d77330 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d77340 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d77350 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d77360 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d77370 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d77380 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00d77390 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d773a0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d773b0 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d773c0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d773d0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d773e0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d773f0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d77400 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d77410 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d77420 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d77430 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d77440 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d77450 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d77460 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d77470 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d77480 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d77490 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d774a0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d774b0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d774c0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d774d0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d774e0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d774f0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d77500 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d77510 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d77520 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d77530 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d77540 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d77550 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d77560 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d77570 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d77580 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d77590 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d775a0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d775b0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d775c0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d775d0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d775e0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d775f0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d77600 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d77610 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d77620 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d77630 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d77640 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d77650 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d77660 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d77670 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d77680 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d77690 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d776a0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d776b0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d776c0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d776d0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d776e0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d776f0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d77700 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d77710 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d77720 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d77730 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d77740 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d77750 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d77760 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d77770 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d77780 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00d77790 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d777a0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d777b0 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d777c0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d777d0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d777e0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d777f0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d77800 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ + 0x00d77810 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ + 0x00d77820 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ + 0x00d77830 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ + 0x00d77840 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ + 0x00d77850 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ + 0x00d77860 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ + 0x00d77870 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ + 0x00d77880 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ + 0x00d77890 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ + 0x00d778a0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d778b0 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ + 0x00d778c0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00d778d0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00d778e0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00d778f0 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00d77900 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d77910 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d77920 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d77930 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00d77940 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00d77950 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d77960 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00d77970 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d77980 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d77990 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00d779a0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00d779b0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00d779c0 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ + 0x00d779d0 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ + 0x00d779e0 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ + 0x00d779f0 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ + 0x00d77a00 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ + 0x00d77a10 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00d77a20 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ + 0x00d77a30 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d77a40 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ + 0x00d77a50 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00d77a60 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d77a70 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ + 0x00d77a80 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d77a90 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ + 0x00d77aa0 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ + 0x00d77ab0 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ + 0x00d77ac0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d77ad0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d77ae0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d77af0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d77b00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d77b10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d77b20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d77b30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d77b40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d77b50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d77b60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d77b70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d77b80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d77b90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d77ba0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d77bb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d77bc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d77bd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d77be0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d77bf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d77c00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d77c10 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ + 0x00d77c20 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ + 0x00d77c30 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ + 0x00d77c40 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ + 0x00d77c50 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ + 0x00d77c60 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d77c70 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00d77c80 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ + 0x00d77c90 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ + 0x00d77ca0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d77cb0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00d77cc0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d77cd0 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ + 0x00d77ce0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d77cf0 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ + 0x00d77d00 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ + 0x00d77d10 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ + 0x00d77d20 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ + 0x00d77d30 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ + 0x00d77d40 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ + 0x00d77d50 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ + 0x00d77d60 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ + 0x00d77d70 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ + 0x00d77d80 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ + 0x00d77d90 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ + 0x00d77da0 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ + 0x00d77db0 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ + 0x00d77dc0 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ + 0x00d77dd0 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ + 0x00d77de0 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ + 0x00d77df0 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ + 0x00d77e00 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ + 0x00d77e10 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d77e20 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ + 0x00d77e30 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ + 0x00d77e40 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ + 0x00d77e50 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ + 0x00d77e60 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ + 0x00d77e70 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d77e80 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ + 0x00d77e90 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ + 0x00d77ea0 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ + 0x00d77eb0 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ + 0x00d77ec0 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ + 0x00d77ed0 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ + 0x00d77ee0 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ + 0x00d77ef0 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ + 0x00d77f00 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ + 0x00d77f10 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ + 0x00d77f20 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ + 0x00d77f30 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ + 0x00d77f40 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ + 0x00d77f50 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ + 0x00d77f60 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ + 0x00d77f70 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ + 0x00d77f80 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ + 0x00d77f90 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d77fa0 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ + 0x00d77fb0 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ + 0x00d77fc0 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ + 0x00d77fd0 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ + 0x00d77fe0 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ + 0x00d77ff0 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ + 0x00d78000 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ + 0x00d78010 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ + 0x00d78020 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ + 0x00d78030 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ + 0x00d78040 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ + 0x00d78050 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ + 0x00d78060 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ + 0x00d78070 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ + 0x00d78080 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ + 0x00d78090 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ + 0x00d780a0 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ + 0x00d780b0 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ + 0x00d780c0 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ + 0x00d780d0 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ + 0x00d780e0 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ + 0x00d780f0 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ + 0x00d78100 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00d78110 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ + 0x00d78120 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ + 0x00d78130 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ + 0x00d78140 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ + 0x00d78150 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00d78160 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00d78170 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00d78180 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00d78190 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00d781a0 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ + 0x00d781b0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00d781c0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d781d0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00d781e0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00d781f0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00d78200 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00d78210 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00d78220 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00d78230 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ + 0x00d78240 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00d78250 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ + 0x00d78260 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ + 0x00d78270 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ + 0x00d78280 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ + 0x00d78290 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ + 0x00d782a0 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ + 0x00d782b0 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ + 0x00d782c0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00d782d0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00d782e0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d782f0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00d78300 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ + 0x00d78310 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00d78320 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00d78330 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00d78340 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00d78350 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00d78360 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ + 0x00d78370 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00d78380 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d78390 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00d783a0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00d783b0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00d783c0 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00d783d0 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00d783e0 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00d783f0 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ + 0x00d78400 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ + 0x00d78410 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ + 0x00d78420 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ + 0x00d78430 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ + 0x00d78440 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ + 0x00d78450 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ + 0x00d78460 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ + 0x00d78470 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ + 0x00d78480 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ + 0x00d78490 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00d784a0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d784b0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00d784c0 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ + 0x00d784d0 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ + 0x00d784e0 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ + 0x00d784f0 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ + 0x00d78500 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ + 0x00d78510 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ + 0x00d78520 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ + 0x00d78530 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ + 0x00d78540 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ + 0x00d78550 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ + 0x00d78560 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ + 0x00d78570 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ + 0x00d78580 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ + 0x00d78590 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ + 0x00d785a0 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ + 0x00d785b0 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ + 0x00d785c0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d785d0 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ + 0x00d785e0 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ + 0x00d785f0 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ + 0x00d78600 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ + 0x00d78610 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ + 0x00d78620 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ + 0x00d78630 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ + 0x00d78640 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00d78650 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ + 0x00d78660 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d78670 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ + 0x00d78680 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ + 0x00d78690 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ + 0x00d786a0 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ + 0x00d786b0 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ + 0x00d786c0 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ + 0x00d786d0 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ + 0x00d786e0 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ + 0x00d786f0 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ + 0x00d78700 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ + 0x00d78710 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ + 0x00d78720 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ + 0x00d78730 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ + 0x00d78740 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ + 0x00d78750 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ + 0x00d78760 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ + 0x00d78770 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ + 0x00d78780 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00d78790 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ + 0x00d787a0 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ + 0x00d787b0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00d787c0 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ + 0x00d787d0 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ + 0x00d787e0 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ + 0x00d787f0 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ + 0x00d78800 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ + 0x00d78810 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ + 0x00d78820 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ + 0x00d78830 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ + 0x00d78840 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ + 0x00d78850 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ + 0x00d78860 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ + 0x00d78870 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ + 0x00d78880 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ + 0x00d78890 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ + 0x00d788a0 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ + 0x00d788b0 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ + 0x00d788c0 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ + 0x00d788d0 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ + 0x00d788e0 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ + 0x00d788f0 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ + 0x00d78900 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ + 0x00d78910 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ + 0x00d78920 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ + 0x00d78930 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ + 0x00d78940 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d78950 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d78960 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d78970 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d78980 65633420 77656967 68747320 3d207665 ec4 weights = ve │ │ │ │ + 0x00d78990 63342830 2e302c20 302e302c 20302e30 c4(0.0, 0.0, 0.0 │ │ │ │ + 0x00d789a0 2c20302e 30293b20 0a202020 20766563 , 0.0); . vec │ │ │ │ + 0x00d789b0 32206520 3d207465 78747572 6528755f 2 e = texture(u_ │ │ │ │ + 0x00d789c0 636f6c6f 72546578 2c20765f 636f6f72 colorTex, v_coor │ │ │ │ + 0x00d789d0 64732e78 79292e72 673b200a 20202020 ds.xy).rg; . │ │ │ │ + 0x00d789e0 69662028 652e6720 3e20302e 3029202f if (e.g > 0.0) / │ │ │ │ + 0x00d789f0 2f204564 67652061 74206e6f 72746820 / Edge at north │ │ │ │ + 0x00d78a00 0a202020 207b200a 20202020 20207665 . { . ve │ │ │ │ + 0x00d78a10 63322064 3b200a20 20202020 20766563 c2 d; . vec │ │ │ │ + 0x00d78a20 3320636f 6f726473 3b200a20 20202020 3 coords; . │ │ │ │ + 0x00d78a30 20636f6f 7264732e 78203d20 534d4141 coords.x = SMAA │ │ │ │ + 0x00d78a40 53656172 6368584c 65667428 765f6f66 SearchXLeft(v_of │ │ │ │ + 0x00d78a50 66736574 302e7879 2c20765f 6f666673 fset0.xy, v_offs │ │ │ │ + 0x00d78a60 6574322e 78293b20 0a202020 20202063 et2.x); . c │ │ │ │ + 0x00d78a70 6f6f7264 732e7920 3d20765f 6f666673 oords.y = v_offs │ │ │ │ + 0x00d78a80 6574312e 793b200a 20202020 2020642e et1.y; . d. │ │ │ │ + 0x00d78a90 78203d20 636f6f72 64732e78 3b200a20 x = coords.x; . │ │ │ │ + 0x00d78aa0 20202020 20666c6f 61742065 31203d20 float e1 = │ │ │ │ + 0x00d78ab0 534d4141 53616d70 6c654c65 76656c5a SMAASampleLevelZ │ │ │ │ + 0x00d78ac0 65726f28 755f636f 6c6f7254 65782c20 ero(u_colorTex, │ │ │ │ + 0x00d78ad0 636f6f72 64732e78 79292e72 3b200a20 coords.xy).r; . │ │ │ │ + 0x00d78ae0 20202020 20636f6f 7264732e 7a203d20 coords.z = │ │ │ │ + 0x00d78af0 534d4141 53656172 63685852 69676874 SMAASearchXRight │ │ │ │ + 0x00d78b00 28765f6f 66667365 74302e7a 772c2076 (v_offset0.zw, v │ │ │ │ + 0x00d78b10 5f6f6666 73657432 2e79293b 200a2020 _offset2.y); . │ │ │ │ + 0x00d78b20 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ + 0x00d78b30 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ + 0x00d78b40 7a7a203d 20755f66 72616d65 62756666 zz = u_framebuff │ │ │ │ + 0x00d78b50 65724d65 74726963 732e7a7a 3b200a20 erMetrics.zz; . │ │ │ │ + 0x00d78b60 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ + 0x00d78b70 41526f75 6e64287a 7a202a20 64202d20 ARound(zz * d - │ │ │ │ + 0x00d78b80 765f636f 6f726473 2e7a7a29 293b200a v_coords.zz)); . │ │ │ │ + 0x00d78b90 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ + 0x00d78ba0 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ + 0x00d78bb0 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ + 0x00d78bc0 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00d78bd0 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ + 0x00d78be0 5465782c 20636f6f 7264732e 7a792c20 Tex, coords.zy, │ │ │ │ + 0x00d78bf0 534d4141 4f666673 65742831 2c203029 SMAAOffset(1, 0) │ │ │ │ + 0x00d78c00 292e723b 200a2020 20202020 77656967 ).r; . weig │ │ │ │ + 0x00d78c10 6874732e 7267203d 20534d41 41417265 hts.rg = SMAAAre │ │ │ │ + 0x00d78c20 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ + 0x00d78c30 293b200a 20202020 7d200a20 20202069 ); . } . i │ │ │ │ + 0x00d78c40 66202865 2e72203e 20302e30 29202f2f f (e.r > 0.0) // │ │ │ │ + 0x00d78c50 20456467 65206174 20776573 74200a20 Edge at west . │ │ │ │ + 0x00d78c60 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00d78c70 20643b20 0a202020 20202076 65633320 d; . vec3 │ │ │ │ + 0x00d78c80 636f6f72 64733b20 0a202020 20202063 coords; . c │ │ │ │ + 0x00d78c90 6f6f7264 732e7920 3d20534d 41415365 oords.y = SMAASe │ │ │ │ + 0x00d78ca0 61726368 59557028 765f6f66 66736574 archYUp(v_offset │ │ │ │ + 0x00d78cb0 312e7879 2c20765f 6f666673 6574322e 1.xy, v_offset2. │ │ │ │ + 0x00d78cc0 7a293b20 0a202020 20202063 6f6f7264 z); . coord │ │ │ │ + 0x00d78cd0 732e7820 3d20765f 6f666673 6574302e s.x = v_offset0. │ │ │ │ + 0x00d78ce0 783b200a 20202020 2020642e 78203d20 x; . d.x = │ │ │ │ + 0x00d78cf0 636f6f72 64732e79 3b200a20 20202020 coords.y; . │ │ │ │ + 0x00d78d00 20666c6f 61742065 31203d20 534d4141 float e1 = SMAA │ │ │ │ + 0x00d78d10 53616d70 6c654c65 76656c5a 65726f28 SampleLevelZero( │ │ │ │ + 0x00d78d20 755f636f 6c6f7254 65782c20 636f6f72 u_colorTex, coor │ │ │ │ + 0x00d78d30 64732e78 79292e67 3b200a20 20202020 ds.xy).g; . │ │ │ │ + 0x00d78d40 20636f6f 7264732e 7a203d20 534d4141 coords.z = SMAA │ │ │ │ + 0x00d78d50 53656172 63685944 6f776e28 765f6f66 SearchYDown(v_of │ │ │ │ + 0x00d78d60 66736574 312e7a77 2c20765f 6f666673 fset1.zw, v_offs │ │ │ │ + 0x00d78d70 6574322e 77293b20 0a202020 20202064 et2.w); . d │ │ │ │ + 0x00d78d80 2e79203d 20636f6f 7264732e 7a3b200a .y = coords.z; . │ │ │ │ + 0x00d78d90 20202020 20207665 63322077 77203d20 vec2 ww = │ │ │ │ + 0x00d78da0 755f6672 616d6562 75666665 724d6574 u_framebufferMet │ │ │ │ + 0x00d78db0 72696373 2e77773b 200a2020 20202020 rics.ww; . │ │ │ │ + 0x00d78dc0 64203d20 61627328 534d4141 526f756e d = abs(SMAARoun │ │ │ │ + 0x00d78dd0 64287777 202a2064 202d2076 5f636f6f d(ww * d - v_coo │ │ │ │ + 0x00d78de0 7264732e 77772929 3b200a20 20202020 rds.ww)); . │ │ │ │ + 0x00d78df0 20766563 32207371 72745f64 203d2073 vec2 sqrt_d = s │ │ │ │ + 0x00d78e00 71727428 64293b20 0a202020 20202066 qrt(d); . f │ │ │ │ + 0x00d78e10 6c6f6174 20653220 3d20534d 41415361 loat e2 = SMAASa │ │ │ │ + 0x00d78e20 6d706c65 4c657665 6c5a6572 6f4f6666 mpleLevelZeroOff │ │ │ │ + 0x00d78e30 73657428 755f636f 6c6f7254 65782c20 set(u_colorTex, │ │ │ │ + 0x00d78e40 636f6f72 64732e78 7a2c2053 4d41414f coords.xz, SMAAO │ │ │ │ + 0x00d78e50 66667365 7428302c 20312929 2e673b20 ffset(0, 1)).g; │ │ │ │ + 0x00d78e60 0a202020 20202077 65696768 74732e62 . weights.b │ │ │ │ + 0x00d78e70 61203d20 534d4141 41726561 28737172 a = SMAAArea(sqr │ │ │ │ + 0x00d78e80 745f642c 2065312c 20653229 3b200a20 t_d, e1, e2); . │ │ │ │ + 0x00d78e90 2020207d 200a2020 2020765f 46726167 } . v_Frag │ │ │ │ + 0x00d78ea0 436f6c6f 72203d20 77656967 6874733b Color = weights; │ │ │ │ + 0x00d78eb0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d78ec0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d78ed0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d78ee0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d78ef0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d78f00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d78f10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d78f20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d78f30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d78f40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d78f50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d78f60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d78f70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d78f80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d78f90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d78fa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d78fb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d78fc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d78fd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d78fe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d78ff0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d79000 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d79010 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d79020 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d79030 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d79040 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d79050 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d79060 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d79070 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d79080 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d79090 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00d790a0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00d790b0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d790c0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d790d0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d790e0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d790f0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d79100 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d79110 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d79120 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d79130 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d79140 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d79150 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d79160 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d79170 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d79180 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d79190 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d791a0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d791b0 50617373 3b200a20 20756e69 666f726d Pass; . uniform │ │ │ │ + 0x00d791c0 2073616d 706c6572 32442075 5f6d6173 sampler2D u_mas │ │ │ │ + 0x00d791d0 6b546578 3b200a20 20636f6e 73742066 kTex; . const f │ │ │ │ + 0x00d791e0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d791f0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d79200 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d79210 0a20207b 200a2020 23696664 65662045 . { . #ifdef E │ │ │ │ + 0x00d79220 4e41424c 455f5654 46200a20 2020204c NABLE_VTF . L │ │ │ │ + 0x00d79230 4f575f50 20766563 3420636f 6c6f7220 OW_P vec4 color │ │ │ │ + 0x00d79240 3d20765f 636f6c6f 723b200a 20202365 = v_color; . #e │ │ │ │ + 0x00d79250 6c736520 0a202020 204c4f57 5f502076 lse . LOW_P v │ │ │ │ + 0x00d79260 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ + 0x00d79270 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d79280 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d79290 293b200a 20202365 6e646966 200a2020 ); . #endif . │ │ │ │ + 0x00d792a0 2020636f 6c6f7220 2a3d2074 65787475 color *= textu │ │ │ │ + 0x00d792b0 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ + 0x00d792c0 6d61736b 54657843 6f6f7264 73293b20 maskTexCoords); │ │ │ │ + 0x00d792d0 0a202020 20636f6c 6f722e61 202a3d20 . color.a *= │ │ │ │ + 0x00d792e0 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d792f0 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ + 0x00d79300 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00d79310 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d79320 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d79330 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d79340 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d79350 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d79360 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d79370 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d79380 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d79390 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d793a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d793b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d793c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d793d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d793e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d793f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d79400 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d79410 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d79420 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d79430 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d79440 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d79450 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d79460 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d79470 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d79480 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d79490 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d794a0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d794b0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d794c0 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ + 0x00d794d0 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ + 0x00d794e0 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ + 0x00d794f0 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ + 0x00d79500 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00d79510 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d79520 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d79530 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d79540 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00d79550 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00d79560 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00d79570 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00d79580 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00d79590 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d795a0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d795b0 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00d795c0 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00d795d0 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00d795e0 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00d795f0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d79600 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ + 0x00d79610 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00d79620 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d79630 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00d79640 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ + 0x00d79650 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d79660 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d79670 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d79680 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d79690 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d796a0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d796b0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d796c0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d796d0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d796e0 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d796f0 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d79700 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d79710 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d79720 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d79730 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d79740 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d79750 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d79760 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d79770 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d79780 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d79790 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d797a0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d797b0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d797c0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d797d0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d797e0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d797f0 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d79800 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d79810 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d79820 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d79830 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d79840 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d79850 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d79860 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d79870 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d79880 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d79890 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d798a0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d798b0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d798c0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d798d0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d798e0 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d798f0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d79900 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d79910 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d79920 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d79930 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d79940 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d79950 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d79960 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d79970 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d79980 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d79990 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d799a0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d799b0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d799c0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d799d0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d799e0 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d799f0 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d79a00 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d79a10 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d79a20 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d79a30 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d79a40 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d79a50 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d79a60 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d79a70 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d79a80 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d79a90 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d79aa0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d79ab0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d79ac0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d79ad0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d79ae0 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d79af0 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d79b00 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d79b10 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d79b20 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d79b30 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d79b40 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d79b50 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d79b60 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d79b70 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d79b80 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d79b90 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d79ba0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d79bb0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d79bc0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d79bd0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d79be0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d79bf0 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ + 0x00d79c00 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ + 0x00d79c10 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ + 0x00d79c20 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ + 0x00d79c30 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ + 0x00d79c40 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ + 0x00d79c50 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00d79c60 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00d79c70 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d79c80 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ + 0x00d79c90 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ + 0x00d79ca0 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ + 0x00d79cb0 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ + 0x00d79cc0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d79cd0 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ + 0x00d79ce0 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ + 0x00d79cf0 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ + 0x00d79d00 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ + 0x00d79d10 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d79d20 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d79d30 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ + 0x00d79d40 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ + 0x00d79d50 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ + 0x00d79d60 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d79d70 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ + 0x00d79d80 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d79d90 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ + 0x00d79da0 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00d79db0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d79dc0 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00d79dd0 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00d79de0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d79df0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d79e00 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ + 0x00d79e10 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ + 0x00d79e20 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00d79e30 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d79e40 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d79e50 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ + 0x00d79e60 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00d79e70 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d79e80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d79e90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d79ea0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d79eb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d79ec0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d79ed0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d79ee0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d79ef0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d79f00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d79f10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d79f20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d79f30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d79f40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d79f50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d79f60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d79f70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d79f80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d79f90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d79fa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d79fb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d79fc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d79fd0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d79fe0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d79ff0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d7a000 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d7a010 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00d7a020 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00d7a030 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00d7a040 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00d7a050 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d7a060 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d7a070 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d7a080 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d7a090 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d7a0a0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d7a0b0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d7a0c0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d7a0d0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d7a0e0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d7a0f0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d7a100 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d7a110 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d7a120 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d7a130 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d7a140 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d7a150 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d7a160 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d7a170 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d7a180 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d7a190 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d7a1a0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d7a1b0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d7a1c0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d7a1d0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d7a1e0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d7a1f0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d7a200 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d7a210 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d7a220 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d7a230 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d7a240 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d7a250 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d7a260 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d7a270 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d7a280 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d7a290 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d7a2a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d7a2b0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d7a2c0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d7a2d0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d7a2e0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d7a2f0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d7a300 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d7a310 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d7a320 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d7a330 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d7a340 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d7a350 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d7a360 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d7a370 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d7a380 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d7a390 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d7a3a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d7a3b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d7a3c0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d7a3d0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d7a3e0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d7a3f0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d7a400 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d7a410 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d7a420 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d7a430 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d7a440 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d7a450 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d7a460 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d7a470 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d7a480 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d7a490 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d7a4a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d7a4b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d7a4c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d7a4d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d7a4e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d7a4f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d7a500 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d7a510 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d7a520 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d7a530 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d7a540 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d7a550 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d7a560 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d7a570 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d7a580 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d7a590 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d7a5a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d7a5b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d7a5c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d7a5d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d7a5e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d7a5f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d7a600 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d7a610 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d7a620 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d7a630 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d7a640 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d7a650 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d7a660 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d7a670 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d7a680 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d7a690 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d7a6a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d7a6b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d7a6c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d7a6d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d7a6e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d7a6f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d7a700 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00d7a710 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ + 0x00d7a720 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ + 0x00d7a730 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ + 0x00d7a740 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ + 0x00d7a750 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ + 0x00d7a760 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00d7a770 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00d7a780 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d7a790 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ + 0x00d7a7a0 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ + 0x00d7a7b0 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00d7a7c0 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00d7a7d0 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00d7a7e0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d7a7f0 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00d7a800 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00d7a810 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d7a820 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d7a830 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d7a840 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d7a850 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d7a860 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d7a870 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d7a880 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d7a890 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d7a8a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d7a8b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d7a8c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d7a8d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d7a8e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d7a8f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d7a900 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d7a910 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d7a920 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d7a930 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d7a940 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d7a950 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d7a960 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d7a970 63322076 5f746578 436f6f72 64733b20 c2 v_texCoords; │ │ │ │ + 0x00d7a980 0a202069 6e207665 63342076 5f636f6c . in vec4 v_col │ │ │ │ + 0x00d7a990 6f723b20 0a20206f 75742076 65633420 or; . out vec4 │ │ │ │ + 0x00d7a9a0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d7a9b0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d7a9c0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d7a9d0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d7a9e0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d7a9f0 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d7aa00 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d7aa10 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00d7aa20 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d7aa30 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ + 0x00d7aa40 6f726473 293b200a 20202020 765f4672 ords); . v_Fr │ │ │ │ + 0x00d7aa50 6167436f 6c6f7220 3d20636f 6c6f7220 agColor = color │ │ │ │ + 0x00d7aa60 2a20765f 636f6c6f 723b200a 20207d20 * v_color; . } │ │ │ │ 0x00d7aa70 0a000000 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... │ │ │ ├── readelf --wide --decompress --hex-dump=.gnu_debuglink {} │ │ │ │ @@ -1,7 +1,7 @@ │ │ │ │ │ │ │ │ Hex dump of section '.gnu_debuglink': │ │ │ │ - 0x00000000 30646237 64333337 37663162 63623732 0db7d3377f1bcb72 │ │ │ │ - 0x00000010 35646339 35613135 35333039 36323136 5dc95a1553096216 │ │ │ │ - 0x00000020 62316261 36382e64 65627567 00000000 b1ba68.debug.... │ │ │ │ - 0x00000030 cd7b8bcf .{.. │ │ │ │ + 0x00000000 35393832 32343762 66303335 38383666 5982247bf035886f │ │ │ │ + 0x00000010 61613730 66633466 63653238 64376536 aa70fc4fce28d7e6 │ │ │ │ + 0x00000020 33393466 66622e64 65627567 00000000 394ffb.debug.... │ │ │ │ + 0x00000030 8a64cc80 .d..