--- /srv/rebuilderd/tmp/rebuilderdm0fbw8/inputs/organicmaps_2026.09.29-32+ds-2_amd64.deb +++ /srv/rebuilderd/tmp/rebuilderdm0fbw8/out/organicmaps_2026.09.29-32+ds-2_amd64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-10-17 06:34:43.000000 debian-binary │ --rw-r--r-- 0 0 0 1272 2026-10-17 06:34:43.000000 control.tar.xz │ --rw-r--r-- 0 0 0 5418936 2026-10-17 06:34:43.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 1276 2026-10-17 06:34:43.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 5418124 2026-10-17 06:34:43.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── ./usr/bin/OrganicMaps │ │ │┄ File has been modified after NT_GNU_BUILD_ID has been applied. │ │ │ ├── readelf --wide --notes {} │ │ │ │ @@ -1,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: ed0b5190e37e90b35e37fd75e3be965154730d58 │ │ │ │ + GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 6db4b6ca4b185aeb65f2f8e923b3bb25c1838075 │ │ │ │ │ │ │ │ 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 @@ │ │ │ │ -X/lib64/ld-linux-x86-64.so.2 │ │ │ │ +u/lib64/ld-linux-x86-64.so.2 │ │ │ │ _ITM_deregisterTMCloneTable │ │ │ │ __gmon_start__ │ │ │ │ _ITM_registerTMCloneTable │ │ │ │ _ZN6google14FlagRegistererC1IiEEPKcS3_S3_PT_S5_ │ │ │ │ _ZN6google16SetVersionStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE │ │ │ │ _ZSt19piecewise_construct │ │ │ │ _ZN6google21ParseCommandLineFlagsEPiPPPcb │ │ │ │ @@ -15374,15 +15374,15 @@ │ │ │ │ u_pivotTransformu_normalTransforu_texCoordFlippiu_tileCoordsMinMu_textureRectMinu_textureIndex[0u_framebufferMet │ │ │ │ Incorrect bindin bindings count.CHECK(bindings.size() == kMaxUniformBuffers + m_maxImageSamplersvkCreateDescriptorSetLayout(device, &descriptorLayout, nullptr, &m_programData[i].m_descriptorSevkCreatePipelineLayout(device, &pipelineLayoutCreateInfo, nullptr, &m_programData[i].m_pipelineLshaders_pack.spv │ │ │ │ @classificator.tx │ │ │ │ IncorrectTransitransitionsFormatUnsupportedTimeZedTimeZoneFormatIncorrectGenerationYearOffsetForIncorrectBaseOffBaseOffsetFormatIncorrectDstDeltionsLengthFormatransitionsAmountIncorrectDayDeltIncorrectMinuteOinuteOfDayFormat$ │ │ │ │ CHECK(it != m_impl.timezones.end& │ │ │ │ generator/timezone/timezone_infoFailed to load timezone database │ │ │ │ https://meta.omaa.omaps.app/maps{"servers":["https://cdn-nl1.organicmaps.app/","https://cdn-uk1.organicmaps.app/","https://cdn.organicmaps.app/"~ │ │ │ │ -=2026.10.17-0-0000-00000000-Linuxproducts_setting │ │ │ │ +=2026.10.22-0-0000-00000000-Linuxproducts_setting │ │ │ │ "placePagePrompt │ │ │ │ CHECK(curr.m_delelta >> 62 == 0) │ │ │ │ ?Zero length lineth linear objectTexture|Handles CHECK(static_caste>(result) == v)CHECK((result > > 0) == (v > 0)) │ │ │ │ tEXtSoftware │ │ │ │ Paint.NET v3.5.87; │ │ │ │ pYldY]d[ │ │ │ │ b7Y0(zdy │ │ │ │ @@ -16994,32 +16994,162 @@ │ │ │ │ #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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 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 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 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 vec4 v_offsets; │ │ │ │ + in vec4 v_color; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 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; │ │ │ │ + #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 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; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + const float kAntialiasingScalar = 0.9; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + float 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 │ │ │ │ @@ -17041,21 +17171,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) * 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_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; │ │ │ │ @@ -17063,28 +17191,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 vec3 a_normal; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out float v_intensity; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const vec4 kNormalizedLightDir = vec4(0.3162, 0.0, 0.9486, 0.0); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17106,30 +17232,17 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - vec4 normal = vec4(a_position + a_normal, 1.0) * u_modelView; │ │ │ │ - normal.xyw = (normal * u_projection).xyw; │ │ │ │ - normal.z = normal.z * u_zScale; │ │ │ │ - pos.xyw = (pos * u_projection).xyw; │ │ │ │ - pos.z = a_position.z * u_zScale; │ │ │ │ - vec4 normDir = normal - pos; │ │ │ │ - if (dot(normDir, normDir) != 0.0) │ │ │ │ - v_intensity = max(0.0, -dot(kNormalizedLightDir, normalize(normDir))); │ │ │ │ - else │ │ │ │ - v_intensity = 0.0; │ │ │ │ - gl_Position = u_pivotTransform * pos; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -17138,32 +17251,56 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ + 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 vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 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; │ │ │ │ + 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 │ │ │ │ @@ -17185,27 +17322,17 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.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_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; │ │ │ │ @@ -17219,47 +17346,42 @@ │ │ │ │ #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ + in vec3 v_radius; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const float kCellPx = 16.0; // one dot per tile -> sparse, regular rows │ │ │ │ - const float kRadiusPx = 1.6; │ │ │ │ - const float kDarken = 0.82; // subtle │ │ │ │ + const float aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + LOW_P vec4 finalColor = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #endif │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - vec2 toCenter = (fract(px / kCellPx) - 0.5) * kCellPx; // regular lattice, no jitter │ │ │ │ - float d = length(toCenter); │ │ │ │ - float aa = max(fwidth(px.x), fwidth(px.y)); │ │ │ │ - float coverage = 1.0 - smoothstep(kRadiusPx - aa, kRadiusPx + aa, d); │ │ │ │ - color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ + 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; │ │ │ │ @@ -17267,61 +17389,54 @@ │ │ │ │ #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; │ │ │ │ + in vec3 v_length; │ │ │ │ + in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - const float kCellPx = 4.0; // denser than stipple (divides the 16px tile, so cells tile seamlessly) │ │ │ │ - const float kBaseRadiusPx = 0.7; │ │ │ │ - const float kRadiusVar = 0.6; // per-cell radius variation -> irregular sizes │ │ │ │ - const float kJitter = 0.5; // keep kJitter*0.5*kCellPx + maxRadius < kCellPx*0.5 │ │ │ │ - const float kDarken = 0.78; │ │ │ │ - float Hash(vec2 p) │ │ │ │ - p = fract(p * vec2(127.1, 311.7)); │ │ │ │ - p += dot(p, p + 34.23); │ │ │ │ - return fract(p.x * p.y); │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.81; │ │ │ │ + const float kOutlineThreshold2 = 0.71; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - #endif │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - vec2 cell = floor(px / kCellPx); │ │ │ │ - vec2 toCenter = │ │ │ │ - (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ - float radius = kBaseRadiusPx * (1.0 - kRadiusVar * 0.5 + kRadiusVar * Hash(cell + 3.7)); │ │ │ │ - float d = length(toCenter); │ │ │ │ - float aa = max(fwidth(px.x), fwidth(px.y)); │ │ │ │ - float coverage = 1.0 - smoothstep(radius - aa, radius + aa, d); │ │ │ │ - color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ - color.a *= u_opacity; │ │ │ │ + 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 │ │ │ │ @@ -17333,57 +17448,43 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ + in vec2 v_maskTexCoord; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const float kCellPx = 8.0; // dot lattice cell (divides the 16px tile, so cells tile seamlessly) │ │ │ │ - const float kRadiusPx = 1.2; // dot radius │ │ │ │ - const float kJitter = 0.55; // keep kJitter*0.5*kCellPx + kRadiusPx < kCellPx*0.5 (dots stay in cell) │ │ │ │ - const float kDarken = 0.80; // surface multiplier under a dot on a light fill (gentle - texture should whisper) │ │ │ │ - float Hash(vec2 p) │ │ │ │ - p = fract(p * vec2(127.1, 311.7)); │ │ │ │ - p += dot(p, p + 34.23); │ │ │ │ - return fract(p.x * p.y); │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + LOW_P vec4 glyphColor = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ #endif │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - vec2 cell = floor(px / kCellPx); │ │ │ │ - vec2 toCenter = │ │ │ │ - (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ - float d = length(toCenter); │ │ │ │ - float aa = max(fwidth(px.x), fwidth(px.y)); // continuous coord: no fract-seam derivative spike │ │ │ │ - float coverage = 1.0 - smoothstep(kRadiusPx - aa, kRadiusPx + aa, d); │ │ │ │ - color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ + 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; │ │ │ │ @@ -17392,29 +17493,32 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 v_normal; │ │ │ │ + in vec2 v_texCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_transform; │ │ │ │ uniform mat4 u_normalTransform; │ │ │ │ uniform vec4 u_color; │ │ │ │ uniform vec2 u_texCoordFlipping; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ - v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * u_color.rgb, u_color.a); │ │ │ │ + vec4 color = texture(u_colorTex, v_texCoords) * u_color; │ │ │ │ + v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * color.rgb, color.a); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17422,21 +17526,46 @@ │ │ │ │ #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 vec4 v_color; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + 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 │ │ │ │ @@ -17458,21 +17587,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); │ │ │ │ - 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; │ │ │ │ @@ -17480,57 +17607,56 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in float v_intensity; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec2 v_texCoords; │ │ │ │ + out vec4 v_color; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - 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; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + 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 │ │ │ │ - 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; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ + 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 = vec4(u_color.rgb, u_color.a * v_intensity); │ │ │ │ + v_texCoords = a_texCoords; │ │ │ │ + v_color = a_color; │ │ │ │ + gl_Position = vec4(a_position, 0, 1) * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17538,21 +17664,25 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - out float v_intensity; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec3 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_params; │ │ │ │ + uniform float u_lineHalfWidth; │ │ │ │ + uniform float u_maxRadius; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17574,21 +17704,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_intensity = a_texCoords.x; │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * u_lineHalfWidth; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + transformedAxisPos += a_normal.zw * u_lineHalfWidth; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_color = a_color; │ │ │ │ + v_radius = vec3(a_normal.zw, u_maxRadius) * u_lineHalfWidth; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17596,33 +17730,48 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_normal; │ │ │ │ - in vec2 v_texCoords; │ │ │ │ + in vec4 v_radius; │ │ │ │ + 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 sampler2D u_colorTex; │ │ │ │ - const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ + 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 kAntialiasingPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ - vec4 color = texture(u_colorTex, v_texCoords) * u_color; │ │ │ │ - v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * color.rgb, color.a); │ │ │ │ + vec4 finalColor = v_color; │ │ │ │ + float aaRadius = max(v_radius.z - kAntialiasingPixelsCount, 0.0); │ │ │ │ + float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, │ │ │ │ + dot(v_radius.xy, v_radius.xy)); │ │ │ │ + finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ + if (finalColor.a < 0.01 || u_routeParams.y > v_radius.w) │ │ │ │ + discard; │ │ │ │ + finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17630,60 +17779,28 @@ │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 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_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; │ │ │ │ @@ -17691,47 +17808,32 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ in vec3 v_radius; │ │ │ │ + in 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; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 finalColor = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - #endif │ │ │ │ + vec4 finalColor = v_color; │ │ │ │ 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); │ │ │ │ + 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 │ │ │ │ #endif │ │ │ │ @@ -17740,34 +17842,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 vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - out vec3 v_radius; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform 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 │ │ │ │ @@ -17789,63 +17874,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, 0, 0) + p; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - v_radius = a_normal; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #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 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 kAntialiasingScalar = 0.9; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - float 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; │ │ │ │ + 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; │ │ │ │ @@ -17853,19 +17891,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_normal; │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec3 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; │ │ │ │ @@ -17895,20 +17934,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() │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -17916,52 +17960,72 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + 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; │ │ │ │ - const float aaPixelsCount = 2.5; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ + 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 │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ - float r1 = (v_normal.z - aaPixelsCount) * (v_normal.z - aaPixelsCount); │ │ │ │ - float r2 = v_normal.x * v_normal.x + v_normal.y * v_normal.y; │ │ │ │ - float r3 = v_normal.z * v_normal.z; │ │ │ │ - float alpha = mix(step(r3, r2), smoothstep(r1, r3, r2), v_normal.w); │ │ │ │ - LOW_P vec4 finalColor = color; │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - alpha); │ │ │ │ - if (finalColor.a == 0.0) │ │ │ │ - discard; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17970,33 +18034,35 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ + const float 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 │ │ │ │ @@ -18018,23 +18084,30 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 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); │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = shiftedPos * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18043,17 +18116,15 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ @@ -18091,62 +18162,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 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; │ │ │ │ + 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 │ │ │ │ - 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 │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - in vec2 v_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; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - vec4 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; │ │ │ │ @@ -18155,27 +18191,25 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ in vec2 a_colorTexCoord; │ │ │ │ - in vec4 a_maskTexCoord; │ │ │ │ out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18197,24 +18231,17 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 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; │ │ │ │ + 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 │ │ │ │ @@ -18223,24 +18250,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ + in float v_intensity; │ │ │ │ out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - v_FragColor = u_color; │ │ │ │ + v_FragColor = vec4(u_color.rgb, u_color.a * v_intensity); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18248,49 +18279,43 @@ │ │ │ │ #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 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; │ │ │ │ - vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ - vec4 transformedPivot = pivot; │ │ │ │ - float w = transformedPivot.w; │ │ │ │ - transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ - transformedPivot.z *= transformedPivot.w / w; │ │ │ │ - #ifdef VULKAN │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ - vec2 d = p - originalAxisPos; │ │ │ │ - if (dot(d, d) != 0.0) │ │ │ │ - return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ - else │ │ │ │ - return originalAxisPos; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - 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 │ │ │ │ + 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; │ │ │ │ @@ -18298,52 +18323,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_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ + 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; │ │ │ │ - const float kPeriodPx = 8.0; // distance between diagonal lines, in 'base' pixels │ │ │ │ - const float kHalfWidthPx = 0.7; // half line width along the x+y axis (~1px perpendicular) │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - #endif │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - float diag = px.x + px.y; │ │ │ │ - float m = mod(diag, kPeriodPx); │ │ │ │ - float dist = min(m, kPeriodPx - m); // distance to the nearest line center │ │ │ │ - float aa = fwidth(diag); │ │ │ │ - float coverage = 1.0 - smoothstep(kHalfWidthPx - aa, kHalfWidthPx + aa, dist); │ │ │ │ - color.a *= coverage * 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; │ │ │ │ @@ -18352,33 +18360,27 @@ │ │ │ │ #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; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + out float v_intensity; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - #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 │ │ │ │ @@ -18400,22 +18402,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() │ │ │ │ - vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec4 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_maskTexCoords = a_maskTexCoords; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18423,59 +18434,60 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const float kRowPeriodPx = 8.0; // vertical distance between dash rows │ │ │ │ - const float kRowCenterPx = 3.5; // first row center (matches the legacy tile) │ │ │ │ - const float kHalfThickPx = 0.5; // half dash thickness -> ~1px │ │ │ │ - const float kDashPeriodPx = 16.0; // dash + gap length │ │ │ │ - const float kDashHalfPx = 4.0; // half dash length -> 8px dash │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + 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 │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - float ym = mod(px.y - kRowCenterPx, kRowPeriodPx); │ │ │ │ - float yDist = min(ym, kRowPeriodPx - ym); │ │ │ │ - float aaY = fwidth(px.y); │ │ │ │ - float onRow = 1.0 - smoothstep(kHalfThickPx - aaY, kHalfThickPx + aaY, yDist); │ │ │ │ - float rowIdx = floor((px.y - kRowCenterPx) / kRowPeriodPx + 0.5); │ │ │ │ - float xPhase = px.x + mod(rowIdx, 2.0) * (kDashPeriodPx * 0.5); │ │ │ │ - float xDist = abs(mod(xPhase, kDashPeriodPx) - kDashHalfPx); │ │ │ │ - float aaX = fwidth(px.x); │ │ │ │ - float onDash = 1.0 - smoothstep(kDashHalfPx - aaX, kDashHalfPx + aaX, xDist); │ │ │ │ - color.a *= onRow * onDash * u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18483,27 +18495,35 @@ │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_texCoords); │ │ │ │ - v_FragColor = color * v_color; │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18512,19 +18532,14 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 a_position; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec2 v_texCoords; │ │ │ │ - out vec4 v_color; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18546,17 +18561,15 @@ │ │ │ │ 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; │ │ │ │ + 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 │ │ │ │ @@ -18571,39 +18584,55 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + const float kRowPeriodPx = 8.0; // vertical distance between dash rows │ │ │ │ + const float kRowCenterPx = 3.5; // first row center (matches the legacy tile) │ │ │ │ + const float kHalfThickPx = 0.5; // half dash thickness -> ~1px │ │ │ │ + const float kDashPeriodPx = 16.0; // dash + gap length │ │ │ │ + const float kDashHalfPx = 4.0; // half dash length -> 8px dash │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ LOW_P vec4 color = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #endif │ │ │ │ - color.a *= u_opacity; │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + float ym = mod(px.y - kRowCenterPx, kRowPeriodPx); │ │ │ │ + float yDist = min(ym, kRowPeriodPx - ym); │ │ │ │ + float aaY = fwidth(px.y); │ │ │ │ + float onRow = 1.0 - smoothstep(kHalfThickPx - aaY, kHalfThickPx + aaY, yDist); │ │ │ │ + float rowIdx = floor((px.y - kRowCenterPx) / kRowPeriodPx + 0.5); │ │ │ │ + float xPhase = px.x + mod(rowIdx, 2.0) * (kDashPeriodPx * 0.5); │ │ │ │ + float xDist = abs(mod(xPhase, kDashPeriodPx) - kDashHalfPx); │ │ │ │ + float aaX = fwidth(px.x); │ │ │ │ + float onDash = 1.0 - smoothstep(kDashHalfPx - aaX, kDashHalfPx + aaX, xDist); │ │ │ │ + color.a *= onRow * onDash * u_opacity; │ │ │ │ v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -18613,20 +18642,21 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoords; │ │ │ │ + out vec4 v_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ @@ -18660,27 +18690,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - float halfWidth = length(normal); │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (halfWidth != 0.0) │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + normal, │ │ │ │ - u_modelView, halfWidth); │ │ │ │ + vec4 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_colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ #endif │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18688,37 +18714,60 @@ │ │ │ │ #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 kCellPx = 8.0; // dot lattice cell (divides the 16px tile, so cells tile seamlessly) │ │ │ │ + const float kRadiusPx = 1.2; // dot radius │ │ │ │ + const float kJitter = 0.55; // keep kJitter*0.5*kCellPx + kRadiusPx < kCellPx*0.5 (dots stay in cell) │ │ │ │ + const float kDarken = 0.80; // surface multiplier under a dot on a light fill (gentle - texture should whisper) │ │ │ │ + float Hash(vec2 p) │ │ │ │ + p = fract(p * vec2(127.1, 311.7)); │ │ │ │ + p += dot(p, p + 34.23); │ │ │ │ + return fract(p.x * p.y); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords) * texture(u_maskTex, v_maskTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + vec2 cell = floor(px / kCellPx); │ │ │ │ + vec2 toCenter = │ │ │ │ + (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ + float d = length(toCenter); │ │ │ │ + float aa = max(fwidth(px.x), fwidth(px.y)); // continuous coord: no fract-seam derivative spike │ │ │ │ + float coverage = 1.0 - smoothstep(kRadiusPx - aa, kRadiusPx + aa, d); │ │ │ │ + color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ + color.a *= u_opacity; │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18769,17 +18818,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.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0, 0) + 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 │ │ │ │ @@ -18789,28 +18839,24 @@ │ │ │ │ #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_position; │ │ │ │ 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 │ │ │ │ @@ -18832,20 +18878,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ + gl_Position = vec4(a_position, 0, 1) * u_modelView * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18853,67 +18899,35 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ - vec4 transformedPivot = pivot; │ │ │ │ - float w = transformedPivot.w; │ │ │ │ - transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ - transformedPivot.z *= transformedPivot.w / w; │ │ │ │ - #ifdef VULKAN │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ - vec2 d = p - originalAxisPos; │ │ │ │ - if (dot(d, d) != 0.0) │ │ │ │ - return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ - else │ │ │ │ - return originalAxisPos; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - float 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 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; │ │ │ │ @@ -18921,26 +18935,34 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ + in vec3 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec3 a_length; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec3 v_length; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ 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 │ │ │ │ @@ -18962,23 +18984,26 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - float normalLen = length(a_normal); │ │ │ │ - vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView; │ │ │ │ - vec4 norm = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - if (dot(n, n) != 0.0) │ │ │ │ - norm = normalize(n) * normalLen; │ │ │ │ - vec4 shiftedPos = norm + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ + if (dot(a_normal, a_normal) != 0.0) │ │ │ │ + vec2 norm = a_normal * u_routeParams.x; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + if (u_routeParams.y != 0.0) │ │ │ │ + len = vec2(a_length.x + a_length.y * u_routeParams.y, a_length.z); │ │ │ │ + v_length = vec3(len, u_routeParams.z); │ │ │ │ + v_color = a_color; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18986,26 +19011,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_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_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; │ │ │ │ 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 │ │ │ │ @@ -19027,19 +19054,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = 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; │ │ │ │ + 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; │ │ │ │ @@ -19047,55 +19080,48 @@ │ │ │ │ #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; │ │ │ │ - const float kOutlineThreshold1 = 0.81; │ │ │ │ - const float kOutlineThreshold2 = 0.71; │ │ │ │ + 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; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - if (v_length.x < v_length.z) │ │ │ │ - discard; │ │ │ │ - vec2 coefs = step(v_length.xx, u_fakeBorders); │ │ │ │ - coefs.y = 1.0 - coefs.y; │ │ │ │ - vec4 mainColor = mix(u_color, u_fakeColor, coefs.x); │ │ │ │ - mainColor = mix(mainColor, u_fakeColor, coefs.y); │ │ │ │ - vec4 mainOutlineColor = mix(u_outlineColor, u_fakeOutlineColor, coefs.x); │ │ │ │ - mainOutlineColor = mix(mainOutlineColor, u_fakeOutlineColor, coefs.y); │ │ │ │ - vec4 color = mix(mix(mainColor, vec4(v_color.rgb, 1.0), v_color.a), mainColor, step(u_routeParams.w, 0.0)); │ │ │ │ - color = mix(color, mainOutlineColor, step(kOutlineThreshold1, abs(v_length.y))); │ │ │ │ - color = mix(color, mainOutlineColor, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_length.y))); │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))); │ │ │ │ - color = vec4(mix(color.rgb, u_maskColor.rgb, u_maskColor.a), color.a); │ │ │ │ - v_FragColor = color; │ │ │ │ + vec4 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; │ │ │ │ @@ -19103,75 +19129,52 @@ │ │ │ │ #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_normal; │ │ │ │ - in vec3 a_length; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_length; │ │ │ │ - out 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; │ │ │ │ + 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_routeParams.x; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - if (u_routeParams.y != 0.0) │ │ │ │ - len = vec2(a_length.x + a_length.y * u_routeParams.y, a_length.z); │ │ │ │ - v_length = vec3(len, u_routeParams.z); │ │ │ │ - v_color = a_color; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + float r1 = (v_normal.z - aaPixelsCount) * (v_normal.z - aaPixelsCount); │ │ │ │ + float r2 = v_normal.x * v_normal.x + v_normal.y * v_normal.y; │ │ │ │ + float r3 = v_normal.z * v_normal.z; │ │ │ │ + float alpha = mix(step(r3, r2), smoothstep(r1, r3, r2), v_normal.w); │ │ │ │ + LOW_P vec4 finalColor = color; │ │ │ │ + finalColor.a = finalColor.a * u_opacity * (1.0 - alpha); │ │ │ │ + if (finalColor.a == 0.0) │ │ │ │ + discard; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -19179,15 +19182,16 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ + in vec3 v_length; │ │ │ │ + in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec4 u_routeParams; │ │ │ │ uniform vec4 u_color; │ │ │ │ uniform vec4 u_maskColor; │ │ │ │ @@ -19195,28 +19199,37 @@ │ │ │ │ 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 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; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - if (finalColor.a < 0.01) │ │ │ │ + if (v_length.x < v_length.z) │ │ │ │ discard; │ │ │ │ - finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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; │ │ │ │ @@ -19224,32 +19237,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 vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ + 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 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 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 │ │ │ │ @@ -19271,126 +19273,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_arrowHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #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 v_length; │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec4 u_maskColor; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_fakeColor; │ │ │ │ - uniform vec4 u_fakeOutlineColor; │ │ │ │ - uniform vec2 u_fakeBorders; │ │ │ │ - uniform vec2 u_pattern; │ │ │ │ - uniform vec2 u_angleCosSin; │ │ │ │ - uniform float u_arrowHalfWidth; │ │ │ │ - uniform float u_opacity; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - 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; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - if (v_length.x < v_length.z) │ │ │ │ - discard; │ │ │ │ - vec2 coefs = step(v_length.xx, u_fakeBorders); │ │ │ │ - coefs.y = 1.0 - coefs.y; │ │ │ │ - vec4 mainColor = mix(u_color, u_fakeColor, coefs.x); │ │ │ │ - mainColor = mix(mainColor, u_fakeColor, coefs.y); │ │ │ │ - vec4 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; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_intensity = a_texCoords.x; │ │ │ │ + gl_Position = position; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ - in vec4 v_radius; │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_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 kAntialiasingPixelsCount = 2.5; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = v_color; │ │ │ │ - float aaRadius = max(v_radius.z - kAntialiasingPixelsCount, 0.0); │ │ │ │ - float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, │ │ │ │ - dot(v_radius.xy, v_radius.xy)); │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ - if (finalColor.a < 0.01 || u_routeParams.y > v_radius.w) │ │ │ │ - discard; │ │ │ │ - finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ - v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -19398,33 +19295,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_normalAndAnimateOrZ; │ │ │ │ + in vec4 a_texCoords; │ │ │ │ in vec4 a_color; │ │ │ │ - out vec4 v_radius; │ │ │ │ - out vec4 v_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 │ │ │ │ @@ -19446,59 +19338,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() │ │ │ │ - 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 kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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; │ │ │ │ @@ -19506,25 +19364,32 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ + in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ 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 mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ 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 │ │ │ │ @@ -19546,20 +19411,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() │ │ │ │ - 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 │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(a_normal, a_normal) != 0.0) │ │ │ │ + vec2 norm = a_normal * u_arrowHalfWidth; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -19567,46 +19434,27 @@ │ │ │ │ #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_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 sampler2D u_colorTex; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - vec4 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 │ │ │ │ @@ -19628,64 +19476,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_colorTexCoords = a_tcoord; │ │ │ │ - gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ - #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; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - #endif │ │ │ │ - color.a *= u_opacity; │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_lengthY))); │ │ │ │ - v_FragColor = color; │ │ │ │ + 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; │ │ │ │ @@ -19693,37 +19497,37 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + 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_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ + 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 │ │ │ │ @@ -19745,30 +19549,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 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_lineParams.x; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - if (u_lineParams.y != 0.0) │ │ │ │ - len = vec2(a_length.x + a_length.y * u_lineParams.y, a_length.z); │ │ │ │ + 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, a_colorTexCoords); │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = a_colorTexCoords; │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ - v_lengthY = len.y; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -19776,117 +19577,25 @@ │ │ │ │ #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; │ │ │ │ + uniform MEDIUM_P sampler2DArray u_colorTex; │ │ │ │ + in vec3 v_texCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_smaaArea; │ │ │ │ - uniform sampler2D u_smaaSearch; │ │ │ │ - #define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0) │ │ │ │ - #define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0) │ │ │ │ - #define SMAA_AREATEX_MAX_DISTANCE 16.0 │ │ │ │ - #define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0)) │ │ │ │ - #define SMAALoopBegin(condition) while (condition) { │ │ │ │ - #define SMAALoopEnd } │ │ │ │ - #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ - #define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) │ │ │ │ - #define SMAARound(v) round((v)) │ │ │ │ - #define SMAAOffset(x,y) ivec2(x,y) │ │ │ │ - const vec2 kAreaTexMaxDistance = vec2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE); │ │ │ │ - const float kActivationThreshold = 0.8281; │ │ │ │ - float SMAASearchLength(vec2 e, float offset) │ │ │ │ - vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0); │ │ │ │ - vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0); │ │ │ │ - scale += vec2(-1.0, 1.0); │ │ │ │ - bias += vec2( 0.5, -0.5); │ │ │ │ - scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r; │ │ │ │ - float SMAASearchXLeft(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x > end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(-2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.0); │ │ │ │ - return u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchXRight(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x < end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.5); │ │ │ │ - return -u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchYUp(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y > end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, -2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.0); │ │ │ │ - return u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - float SMAASearchYDown(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y < end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, 2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.5); │ │ │ │ - return -u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - vec2 SMAAArea(vec2 dist, float e1, float e2) │ │ │ │ - vec2 texcoord = kAreaTexMaxDistance * SMAARound(4.0 * vec2(e1, e2)) + dist; │ │ │ │ - texcoord = SMAA_AREATEX_PIXEL_SIZE * (texcoord + 0.5); │ │ │ │ - return SMAASampleLevelZero(u_smaaArea, texcoord).rg; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - vec2 e = texture(u_colorTex, v_coords.xy).rg; │ │ │ │ - if (e.g > 0.0) // Edge at north │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x); │ │ │ │ - coords.y = v_offset1.y; │ │ │ │ - d.x = coords.x; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r; │ │ │ │ - coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 zz = u_framebufferMetrics.zz; │ │ │ │ - d = abs(SMAARound(zz * d - v_coords.zz)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r; │ │ │ │ - weights.rg = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - if (e.r > 0.0) // Edge at west │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z); │ │ │ │ - coords.x = v_offset0.x; │ │ │ │ - d.x = coords.y; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g; │ │ │ │ - coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 ww = u_framebufferMetrics.ww; │ │ │ │ - d = abs(SMAARound(ww * d - v_coords.ww)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g; │ │ │ │ - weights.ba = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - v_FragColor = weights; │ │ │ │ + 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; │ │ │ │ @@ -19894,58 +19603,47 @@ │ │ │ │ #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 │ │ │ │ - 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 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - 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 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; │ │ │ │ @@ -19953,50 +19651,40 @@ │ │ │ │ #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; │ │ │ │ + in vec4 v_texCoords; │ │ │ │ + in vec4 v_maskColor; │ │ │ │ out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - #define SMAA_THRESHOLD 0.05 │ │ │ │ - const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ - #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ - const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ - float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ - float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ - vec4 delta; │ │ │ │ - delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ - vec2 edges = step(kThreshold, delta.xy); │ │ │ │ - if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ - discard; │ │ │ │ - float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ - float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ - vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ - float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ - float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ - maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ - float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ - edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ - v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ + 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; │ │ │ │ @@ -20004,21 +19692,26 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform 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 │ │ │ │ @@ -20040,68 +19733,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() │ │ │ │ - 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 │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #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; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - vec4 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; │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + float normalLen = length(a_normal); │ │ │ │ + vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView; │ │ │ │ + vec4 norm = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ + if (dot(n, n) != 0.0) │ │ │ │ + norm = normalize(n) * normalLen; │ │ │ │ + vec4 shiftedPos = norm + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -20109,19 +19757,24 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_color; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_params; │ │ │ │ + uniform float u_lineHalfWidth; │ │ │ │ + uniform float u_maxRadius; │ │ │ │ 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 │ │ │ │ @@ -20143,17 +19796,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() │ │ │ │ - v_colorTexCoords = a_tcoord; │ │ │ │ - v_offset = u_framebufferMetrics.xyxy * vec4(1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ - gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ + vec2 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; │ │ │ │ @@ -20167,85 +19826,47 @@ │ │ │ │ #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + const float kCellPx = 16.0; // one dot per tile -> sparse, regular rows │ │ │ │ + const float kRadiusPx = 1.6; │ │ │ │ + const float kDarken = 0.82; // subtle │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 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 │ │ │ │ - #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 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; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 glyphColor = v_color; │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #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; │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + vec2 toCenter = (fract(px / kCellPx) - 0.5) * kCellPx; // regular lattice, no jitter │ │ │ │ + float d = length(toCenter); │ │ │ │ + float aa = max(fwidth(px.x), fwidth(px.y)); │ │ │ │ + float coverage = 1.0 - smoothstep(kRadiusPx - aa, kRadiusPx + aa, d); │ │ │ │ + color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ + color.a *= u_opacity; │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -20253,24 +19874,23 @@ │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ @@ -20303,23 +19923,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ + vec4 pos = vec4(a_normal.xy, 0, 0) + p; │ │ │ │ + gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = a_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; │ │ │ │ @@ -20327,33 +19947,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; │ │ │ │ - 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 │ │ │ │ @@ -20379,20 +19992,15 @@ │ │ │ │ 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; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -20400,37 +20008,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 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 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 │ │ │ │ @@ -20452,27 +20057,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 + 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; │ │ │ │ @@ -20480,35 +20081,70 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + 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 kBaseDepthShift = -10.0; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 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 │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -20530,27 +20166,26 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float 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; │ │ │ │ + float sinV = sin(u_azimut); │ │ │ │ + float cosV = cos(u_azimut); │ │ │ │ + mat4 rotation; │ │ │ │ + rotation[0] = vec4(cosV, sinV, 0.0, 0.0); │ │ │ │ + rotation[1] = vec4(-sinV, cosV, 0.0, 0.0); │ │ │ │ + rotation[2] = vec4(0.0, 0.0, 1.0, 0.0); │ │ │ │ + rotation[3] = vec4(0.0, 0.0, 0.0, 1.0); │ │ │ │ + vec4 pos = vec4(u_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 normal = vec4(a_normal, 0, 0); │ │ │ │ + vec4 shiftedPos = normal * rotation + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -20558,46 +20193,111 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + 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 vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #define SMAA_THRESHOLD 0.05 │ │ │ │ + const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ + #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ + const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 glyphColor = v_color; │ │ │ │ + float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ + float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ + float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ + vec4 delta; │ │ │ │ + delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ + vec2 edges = step(kThreshold, delta.xy); │ │ │ │ + if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ + discard; │ │ │ │ + float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ + float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ + vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ + float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ + float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ + maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ + float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ + edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ + v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ #else │ │ │ │ - LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #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; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ + void main() │ │ │ │ + vec4 position = vec4(u_position.xy, 0.0, 1.0) * u_modelView; │ │ │ │ + vec4 normal = vec4(a_normal * u_accuracy, 0.0, 0.0); │ │ │ │ + position = (position + normal) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(position, u_pivotTransform, u_position.z * u_zScale); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -20606,35 +20306,31 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ #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 │ │ │ │ @@ -20656,30 +20352,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float depthShift = kBaseDepthShift * isOutline; │ │ │ │ - vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ - gl_Position = shiftedPos * u_projection; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -20692,29 +20379,38 @@ │ │ │ │ #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 vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ vec4 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 │ │ │ │ @@ -20723,59 +20419,43 @@ │ │ │ │ #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; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ - vec4 transformedPivot = pivot; │ │ │ │ - float w = transformedPivot.w; │ │ │ │ - transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ - transformedPivot.z *= transformedPivot.w / w; │ │ │ │ - #ifdef VULKAN │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ - vec2 d = p - originalAxisPos; │ │ │ │ - if (dot(d, d) != 0.0) │ │ │ │ - return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ - else │ │ │ │ - return originalAxisPos; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #ifdef 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; │ │ │ │ @@ -20783,35 +20463,47 @@ │ │ │ │ #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; │ │ │ │ + #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 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 sampler2D u_colorTex; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 finalColor = vec4(texture(u_colorTex, v_colorTexCoords).rgb, u_opacity); │ │ │ │ - v_FragColor = vec4((v_intensity * 0.2 + 0.8) * finalColor.rgb, finalColor.a); │ │ │ │ + #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; │ │ │ │ @@ -20819,26 +20511,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 vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ + 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 │ │ │ │ @@ -20860,54 +20547,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #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 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 │ │ │ │ - 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; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - vec4 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; │ │ │ │ @@ -20915,24 +20569,23 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + in 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 │ │ │ │ @@ -20954,20 +20607,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() │ │ │ │ - gl_Position = vec4(a_position, 0, 1) * u_modelView * u_projection; │ │ │ │ + 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; │ │ │ │ + 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; │ │ │ │ @@ -20975,36 +20630,49 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + in vec2 v_maskTexCoord; │ │ │ │ + in float v_halfLength; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.8; │ │ │ │ + const float kOutlineThreshold2 = 0.5; │ │ │ │ + const float kMaskOpacity = 0.7; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + float alphaCode = color.a; │ │ │ │ + vec4 mask = texture(u_maskTex, v_maskTexCoord); │ │ │ │ + color.a = u_opacity * (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_halfLength))); │ │ │ │ + color.rgb = mix(color.rgb, mask.rgb * mix(u_lightArrowColor.rgb, u_darkArrowColor.rgb, step(alphaCode, 0.6)), mask.a * kMaskOpacity); │ │ │ │ + if (u_outline > 0.0) │ │ │ │ + color.rgb = mix(color.rgb, u_outlineColor.rgb, step(kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ + color.rgb = mix(color.rgb, u_outlineColor.rgb, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -21012,25 +20680,30 @@ │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - v_FragColor = texture(u_colorTex, v_texCoords.xy); │ │ │ │ + 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; │ │ │ │ @@ -21038,22 +20711,37 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #define TILE_BACKGROUND_MAX_COUNT 64 │ │ │ │ - out vec3 v_texCoords; │ │ │ │ - uniform vec4 u_tileCoordsMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ - uniform vec4 u_textureRectMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ - uniform int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + in vec3 a_position; │ │ │ │ + in 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; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ 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 │ │ │ │ @@ -21075,22 +20763,30 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 quadVertex = vec2(gl_VertexID & 1, (gl_VertexID >> 1) & 1); │ │ │ │ - vec4 tileCoordsMinMax = u_tileCoordsMinMax[gl_InstanceID]; │ │ │ │ - vec2 worldPos = mix(tileCoordsMinMax.xy, tileCoordsMinMax.zw, quadVertex); │ │ │ │ - vec4 pos = vec4(worldPos, 0.0, 1.0) * u_modelView * u_projection; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ + if (dot(a_normal, a_normal) != 0.0) │ │ │ │ + vec2 norm = a_normal * u_lineParams.x; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + if (u_lineParams.y != 0.0) │ │ │ │ + len = vec2(a_length.x + a_length.y * u_lineParams.y, a_length.z); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = a_colorTexCoords; │ │ │ │ + #endif │ │ │ │ + v_lengthY = len.y; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - vec4 textureRectMinMax = u_textureRectMinMax[gl_InstanceID]; │ │ │ │ - vec2 texUV = mix(textureRectMinMax.xy, textureRectMinMax.zw, quadVertex); │ │ │ │ - v_texCoords = vec3(texUV, float(u_textureIndex[gl_InstanceID])); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -21098,25 +20794,24 @@ │ │ │ │ #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; │ │ │ │ + uniform vec4 u_color; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - v_FragColor = texture(u_colorTex, v_texCoords); │ │ │ │ + v_FragColor = u_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -21124,48 +20819,61 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ - in float v_halfLength; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - const float kOutlineThreshold1 = 0.8; │ │ │ │ - const float kOutlineThreshold2 = 0.5; │ │ │ │ - const float kMaskOpacity = 0.7; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const float kCellPx = 4.0; // denser than stipple (divides the 16px tile, so cells tile seamlessly) │ │ │ │ + const float kBaseRadiusPx = 0.7; │ │ │ │ + const float kRadiusVar = 0.6; // per-cell radius variation -> irregular sizes │ │ │ │ + const float kJitter = 0.5; // keep kJitter*0.5*kCellPx + maxRadius < kCellPx*0.5 │ │ │ │ + const float kDarken = 0.78; │ │ │ │ + float Hash(vec2 p) │ │ │ │ + p = fract(p * vec2(127.1, 311.7)); │ │ │ │ + p += dot(p, p + 34.23); │ │ │ │ + return fract(p.x * p.y); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - float alphaCode = color.a; │ │ │ │ - vec4 mask = texture(u_maskTex, v_maskTexCoord); │ │ │ │ - color.a = u_opacity * (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_halfLength))); │ │ │ │ - color.rgb = mix(color.rgb, mask.rgb * mix(u_lightArrowColor.rgb, u_darkArrowColor.rgb, step(alphaCode, 0.6)), mask.a * kMaskOpacity); │ │ │ │ - if (u_outline > 0.0) │ │ │ │ - color.rgb = mix(color.rgb, u_outlineColor.rgb, step(kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ - color.rgb = mix(color.rgb, u_outlineColor.rgb, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength))); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + vec2 cell = floor(px / kCellPx); │ │ │ │ + vec2 toCenter = │ │ │ │ + (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ + float radius = kBaseRadiusPx * (1.0 - kRadiusVar * 0.5 + kRadiusVar * Hash(cell + 3.7)); │ │ │ │ + float d = length(toCenter); │ │ │ │ + float aa = max(fwidth(px.x), fwidth(px.y)); │ │ │ │ + float coverage = 1.0 - smoothstep(radius - aa, radius + aa, d); │ │ │ │ + color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ + color.a *= u_opacity; │ │ │ │ v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -21174,30 +20882,60 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - out float v_halfLength; │ │ │ │ + in vec2 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; │ │ │ │ - const float kArrowVSize = 0.25; │ │ │ │ + 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 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; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + #define TILE_BACKGROUND_MAX_COUNT 64 │ │ │ │ + out vec3 v_texCoords; │ │ │ │ + uniform vec4 u_tileCoordsMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform vec4 u_textureRectMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -21219,30 +20957,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_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; │ │ │ │ + vec2 quadVertex = vec2(gl_VertexID & 1, (gl_VertexID >> 1) & 1); │ │ │ │ + vec4 tileCoordsMinMax = u_tileCoordsMinMax[gl_InstanceID]; │ │ │ │ + vec2 worldPos = mix(tileCoordsMinMax.xy, tileCoordsMinMax.zw, quadVertex); │ │ │ │ + vec4 pos = vec4(worldPos, 0.0, 1.0) * u_modelView * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec4 textureRectMinMax = u_textureRectMinMax[gl_InstanceID]; │ │ │ │ + vec2 texUV = mix(textureRectMinMax.xy, textureRectMinMax.zw, quadVertex); │ │ │ │ + v_texCoords = vec3(texUV, float(u_textureIndex[gl_InstanceID])); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -21250,43 +20980,73 @@ │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ - 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 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; │ │ │ │ @@ -21366,35 +21126,75 @@ │ │ │ │ #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 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + const float kArrowVSize = 0.25; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - v_FragColor = vec4(color.rgb, u_opacity); │ │ │ │ + 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; │ │ │ │ @@ -21403,25 +21203,33 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + in 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_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 │ │ │ │ @@ -21443,43 +21251,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 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; │ │ │ │ + vec4 pos = vec4(a_position, 1) * u_modelView * 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 │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - v_FragColor = v_color; │ │ │ │ + v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -21490,14 +21277,15 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ in vec4 a_normal; │ │ │ │ in vec4 a_color; │ │ │ │ + out vec4 v_offsets; │ │ │ │ out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec4 u_params; │ │ │ │ uniform float u_lineHalfWidth; │ │ │ │ uniform float u_maxRadius; │ │ │ │ @@ -21526,23 +21314,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_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.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; │ │ │ │ @@ -21550,59 +21338,33 @@ │ │ │ │ #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; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - vec4 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 │ │ │ │ - #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_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 │ │ │ │ @@ -21624,25 +21386,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; │ │ │ │ @@ -21650,32 +21411,98 @@ │ │ │ │ #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; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 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 │ │ │ │ @@ -21684,25 +21511,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 │ │ │ │ @@ -21724,23 +21561,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; │ │ │ │ @@ -21748,40 +21589,170 @@ │ │ │ │ #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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ + vec2 e = texture(u_colorTex, v_coords.xy).rg; │ │ │ │ + if (e.g > 0.0) // Edge at north │ │ │ │ + vec2 d; │ │ │ │ + vec3 coords; │ │ │ │ + coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x); │ │ │ │ + coords.y = v_offset1.y; │ │ │ │ + d.x = coords.x; │ │ │ │ + float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r; │ │ │ │ + coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y); │ │ │ │ + d.y = coords.z; │ │ │ │ + vec2 zz = u_framebufferMetrics.zz; │ │ │ │ + d = abs(SMAARound(zz * d - v_coords.zz)); │ │ │ │ + vec2 sqrt_d = sqrt(d); │ │ │ │ + float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r; │ │ │ │ + weights.rg = SMAAArea(sqrt_d, e1, e2); │ │ │ │ + if (e.r > 0.0) // Edge at west │ │ │ │ + vec2 d; │ │ │ │ + vec3 coords; │ │ │ │ + coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z); │ │ │ │ + coords.x = v_offset0.x; │ │ │ │ + d.x = coords.y; │ │ │ │ + float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g; │ │ │ │ + coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w); │ │ │ │ + d.y = coords.z; │ │ │ │ + vec2 ww = u_framebufferMetrics.ww; │ │ │ │ + d = abs(SMAARound(ww * d - v_coords.ww)); │ │ │ │ + vec2 sqrt_d = sqrt(d); │ │ │ │ + float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g; │ │ │ │ + weights.ba = SMAAArea(sqrt_d, e1, e2); │ │ │ │ + v_FragColor = weights; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #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; │ │ │ │ + const float kPeriodPx = 8.0; // distance between diagonal lines, in 'base' pixels │ │ │ │ + const float kHalfWidthPx = 0.7; // half line width along the x+y axis (~1px perpendicular) │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 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 │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + float diag = px.x + px.y; │ │ │ │ + float m = mod(diag, kPeriodPx); │ │ │ │ + float dist = min(m, kPeriodPx - m); // distance to the nearest line center │ │ │ │ + float aa = fwidth(diag); │ │ │ │ + float coverage = 1.0 - smoothstep(kHalfWidthPx - aa, kHalfWidthPx + aa, dist); │ │ │ │ + color.a *= coverage * u_opacity; │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -21790,27 +21761,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 │ │ │ │ @@ -21832,25 +21808,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; │ │ │ │ @@ -21858,20 +21836,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; │ │ │ │ @@ -21901,25 +21879,47 @@ │ │ │ │ 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; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_texCoords); │ │ │ │ + v_FragColor = color * v_color; │ │ │ │ *ZN2dp12DrapeRoutine3RunIZNS_6vulkan19VulkanObjectManager23CollectObjectsForThreadERSt6vectorINS2_12VulkanObjectESaIS5_EEEUlvE_EESt10shared_ptrINS0_6ResultEEOT_EUlvE_ │ │ │ │ N2dp18HWTextureAllocatorE │ │ │ │ N2dp14MeshObjectImplE │ │ │ │ N2dp6vulkan22VulkanTextureAllocatorE │ │ │ │ N2dp6vulkan13VulkanTextureE │ │ │ │ N2dp6vulkan20VulkanMeshObjectImplE │ │ │ │ N2dp21VertexArrayBufferImplE │ │ │ ├── objdump --line-numbers --disassemble --demangle --reloc --no-show-raw-insn --section=.text {} │ │ │ │ @@ -2300479,828 +2300479,828 @@ │ │ │ │ lea 0x60(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f5a9(%rip),%rsi # d2359b std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f28db> │ │ │ │ lea 0x40(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x56c65d(%rip),%rbp # 1020660 ::id@GLIBCXX_3.4+0x5f20> │ │ │ │ - lea 0x329556(%rip),%r8 │ │ │ │ - lea 0x329c0f(%rip),%rcx │ │ │ │ + lea 0x334b56(%rip),%r8 │ │ │ │ + lea 0x33cc0f(%rip),%rcx │ │ │ │ lea 0x60(%rsp),%rdx │ │ │ │ mov %rbp,%rdi │ │ │ │ lea 0x40(%rsp),%rsi │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f586(%rip),%rsi # d235b5 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f28f5> │ │ │ │ lea 0xa0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f582(%rip),%rsi # d235ca std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f290a> │ │ │ │ lea 0x80(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x342d84(%rip),%r8 │ │ │ │ - lea 0x3431fd(%rip),%rcx │ │ │ │ + lea 0x32ec44(%rip),%r8 │ │ │ │ + lea 0x322dfd(%rip),%rcx │ │ │ │ lea 0xa0(%rsp),%rdx │ │ │ │ lea 0x80(%rsp),%rsi │ │ │ │ lea 0x56c636(%rip),%rdi # 10206b0 ::id@GLIBCXX_3.4+0x5f70> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f523(%rip),%rsi # d235ae std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f28ee> │ │ │ │ lea 0xe0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f51f(%rip),%rsi # d235c3 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2903> │ │ │ │ lea 0xc0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x330248(%rip),%r8 │ │ │ │ - lea 0x330721(%rip),%rcx │ │ │ │ + lea 0x3447e8(%rip),%r8 │ │ │ │ + lea 0x34da21(%rip),%rcx │ │ │ │ lea 0xe0(%rsp),%rdx │ │ │ │ lea 0xc0(%rsp),%rsi │ │ │ │ lea 0x56c62a(%rip),%rdi # 1020700 ::id@GLIBCXX_3.4+0x5fc0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f4f1(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0x120(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f4e6(%rip),%rsi # d235e6 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2926> │ │ │ │ lea 0x100(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34cb6c(%rip),%r8 │ │ │ │ - lea 0x34d105(%rip),%rcx │ │ │ │ + lea 0x33960c(%rip),%r8 │ │ │ │ + lea 0x336145(%rip),%rcx │ │ │ │ lea 0x120(%rsp),%rdx │ │ │ │ lea 0x100(%rsp),%rsi │ │ │ │ lea 0x56c61e(%rip),%rdi # 1020750 ::id@GLIBCXX_3.4+0x6010> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f495(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0x160(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f48a(%rip),%rsi # d235e6 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2926> │ │ │ │ lea 0x140(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34cb10(%rip),%r8 │ │ │ │ - lea 0x34d0a9(%rip),%rcx │ │ │ │ + lea 0x3395b0(%rip),%r8 │ │ │ │ + lea 0x3360e9(%rip),%rcx │ │ │ │ lea 0x160(%rsp),%rdx │ │ │ │ lea 0x140(%rsp),%rsi │ │ │ │ lea 0x56c612(%rip),%rdi # 10207a0 ::id@GLIBCXX_3.4+0x6060> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f455(%rip),%rsi # d235f4 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2934> │ │ │ │ lea 0x1a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f445(%rip),%rsi # d235fd std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f293d> │ │ │ │ lea 0x180(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33e754(%rip),%r8 │ │ │ │ - lea 0x34028d(%rip),%rcx │ │ │ │ + lea 0x338f54(%rip),%r8 │ │ │ │ + lea 0x33802d(%rip),%rcx │ │ │ │ lea 0x1a0(%rsp),%rdx │ │ │ │ lea 0x180(%rsp),%rsi │ │ │ │ lea 0x56c606(%rip),%rdi # 10207f0 ::id@GLIBCXX_3.4+0x60b0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f3f9(%rip),%rsi # d235f4 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2934> │ │ │ │ lea 0x1e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f3fb(%rip),%rsi # d2360f std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f294f> │ │ │ │ lea 0x1c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33e6f8(%rip),%r8 │ │ │ │ - lea 0x33ecf1(%rip),%rcx │ │ │ │ + lea 0x338ef8(%rip),%r8 │ │ │ │ + lea 0x3455d1(%rip),%rcx │ │ │ │ lea 0x1e0(%rsp),%rdx │ │ │ │ lea 0x1c0(%rsp),%rsi │ │ │ │ lea 0x56c5fa(%rip),%rdi # 1020840 ::id@GLIBCXX_3.4+0x6100> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f3c1(%rip),%rsi # d23618 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2958> │ │ │ │ lea 0x220(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f3be(%rip),%rsi # d2362e std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f296e> │ │ │ │ lea 0x200(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34199c(%rip),%r8 │ │ │ │ - lea 0x341f75(%rip),%rcx │ │ │ │ + lea 0x3250bc(%rip),%r8 │ │ │ │ + lea 0x32a735(%rip),%rcx │ │ │ │ lea 0x220(%rsp),%rdx │ │ │ │ lea 0x200(%rsp),%rsi │ │ │ │ lea 0x56c5ee(%rip),%rdi # 1020890 ::id@GLIBCXX_3.4+0x6150> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f365(%rip),%rsi # d23618 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2958> │ │ │ │ lea 0x260(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f362(%rip),%rsi # d2362e std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f296e> │ │ │ │ lea 0x240(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x341940(%rip),%r8 │ │ │ │ - lea 0x341f19(%rip),%rcx │ │ │ │ + lea 0x325060(%rip),%r8 │ │ │ │ + lea 0x32a6d9(%rip),%rcx │ │ │ │ lea 0x260(%rsp),%rdx │ │ │ │ lea 0x240(%rsp),%rsi │ │ │ │ lea 0x56c5e2(%rip),%rdi # 10208e0 ::id@GLIBCXX_3.4+0x61a0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f335(%rip),%rsi # d23644 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2984> │ │ │ │ lea 0x2a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f346(%rip),%rsi # d2366e std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29ae> │ │ │ │ lea 0x280(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33e0c4(%rip),%r8 │ │ │ │ - lea 0x320efd(%rip),%rcx │ │ │ │ + lea 0x33d344(%rip),%r8 │ │ │ │ + lea 0x33f49d(%rip),%rcx │ │ │ │ lea 0x2a0(%rsp),%rdx │ │ │ │ lea 0x280(%rsp),%rsi │ │ │ │ lea 0x56c5d6(%rip),%rdi # 1020930 ::id@GLIBCXX_3.4+0x61f0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f2e9(%rip),%rsi # d23654 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2994> │ │ │ │ lea 0x2e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f2e1(%rip),%rsi # d23665 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29a5> │ │ │ │ lea 0x2c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x323ea8(%rip),%r8 │ │ │ │ - lea 0x32cfe1(%rip),%rcx │ │ │ │ + lea 0x3308c8(%rip),%r8 │ │ │ │ + lea 0x347781(%rip),%rcx │ │ │ │ lea 0x2e0(%rsp),%rdx │ │ │ │ lea 0x2c0(%rsp),%rsi │ │ │ │ lea 0x56c5ca(%rip),%rdi # 1020980 ::id@GLIBCXX_3.4+0x6240> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f2b0(%rip),%rsi # d23677 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29b7> │ │ │ │ lea 0x320(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f285(%rip),%rsi # d23665 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29a5> │ │ │ │ lea 0x300(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32352c(%rip),%r8 │ │ │ │ - lea 0x32cf85(%rip),%rcx │ │ │ │ + lea 0x343b8c(%rip),%r8 │ │ │ │ + lea 0x347725(%rip),%rcx │ │ │ │ lea 0x320(%rsp),%rdx │ │ │ │ lea 0x300(%rsp),%rsi │ │ │ │ lea 0x56c5be(%rip),%rdi # 10209d0 ::id@GLIBCXX_3.4+0x6290> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f265(%rip),%rsi # d23688 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29c8> │ │ │ │ lea 0x360(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f229(%rip),%rsi # d23665 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29a5> │ │ │ │ lea 0x340(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x322db0(%rip),%r8 │ │ │ │ - lea 0x32cf29(%rip),%rcx │ │ │ │ + lea 0x33acd0(%rip),%r8 │ │ │ │ + lea 0x3476c9(%rip),%rcx │ │ │ │ lea 0x360(%rsp),%rdx │ │ │ │ lea 0x340(%rsp),%rsi │ │ │ │ lea 0x56c5b2(%rip),%rdi # 1020a20 ::id@GLIBCXX_3.4+0x62e0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f1c5(%rip),%rsi # d23644 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2984> │ │ │ │ lea 0x3a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f1d6(%rip),%rsi # d2366e std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29ae> │ │ │ │ lea 0x380(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33df54(%rip),%r8 │ │ │ │ - lea 0x320d8d(%rip),%rcx │ │ │ │ + lea 0x33d1d4(%rip),%r8 │ │ │ │ + lea 0x33f32d(%rip),%rcx │ │ │ │ lea 0x3a0(%rsp),%rdx │ │ │ │ lea 0x380(%rsp),%rsi │ │ │ │ lea 0x56c5a6(%rip),%rdi # 1020a70 ::id@GLIBCXX_3.4+0x6330> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f1bb(%rip),%rsi # d23696 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29d6> │ │ │ │ lea 0x3e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f1b2(%rip),%rsi # d236a6 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29e6> │ │ │ │ lea 0x3c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x343698(%rip),%r8 │ │ │ │ - lea 0x321711(%rip),%rcx │ │ │ │ + lea 0x32ce38(%rip),%r8 │ │ │ │ + lea 0x32d2f1(%rip),%rcx │ │ │ │ lea 0x3e0(%rsp),%rdx │ │ │ │ lea 0x3c0(%rsp),%rsi │ │ │ │ lea 0x56c59a(%rip),%rdi # 1020ac0 ::id@GLIBCXX_3.4+0x6380> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f10d(%rip),%rsi # d23644 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2984> │ │ │ │ lea 0x420(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f161(%rip),%rsi # d236b1 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29f1> │ │ │ │ lea 0x400(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33de9c(%rip),%r8 │ │ │ │ - lea 0x322215(%rip),%rcx │ │ │ │ + lea 0x33d11c(%rip),%r8 │ │ │ │ + lea 0x32b035(%rip),%rcx │ │ │ │ lea 0x420(%rsp),%rdx │ │ │ │ lea 0x400(%rsp),%rsi │ │ │ │ lea 0x56c58e(%rip),%rdi # 1020b10 ::id@GLIBCXX_3.4+0x63d0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f3c3(%rip),%rsi # d23956 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c96> │ │ │ │ lea 0x460(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f10f(%rip),%rsi # d236bb std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29fb> │ │ │ │ lea 0x440(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32ece0(%rip),%r8 │ │ │ │ - lea 0x32f1d9(%rip),%rcx │ │ │ │ + lea 0x3401c0(%rip),%r8 │ │ │ │ + lea 0x34c9b9(%rip),%rcx │ │ │ │ lea 0x460(%rsp),%rdx │ │ │ │ lea 0x440(%rsp),%rsi │ │ │ │ lea 0x56c582(%rip),%rdi # 1020b60 ::id@GLIBCXX_3.4+0x6420> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f0d5(%rip),%rsi # d236c4 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a04> │ │ │ │ lea 0x4a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f0cf(%rip),%rsi # d236d7 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a17> │ │ │ │ lea 0x480(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34a864(%rip),%r8 │ │ │ │ - lea 0x34acdd(%rip),%rcx │ │ │ │ + lea 0x328164(%rip),%r8 │ │ │ │ + lea 0x326bfd(%rip),%rcx │ │ │ │ lea 0x4a0(%rsp),%rdx │ │ │ │ lea 0x480(%rsp),%rsi │ │ │ │ lea 0x56c576(%rip),%rdi # 1020bb0 ::id@GLIBCXX_3.4+0x6470> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f09f(%rip),%rsi # d236ea std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a2a> │ │ │ │ lea 0x4e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f096(%rip),%rsi # d236fa std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a3a> │ │ │ │ lea 0x4c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32aaa8(%rip),%r8 │ │ │ │ - lea 0x32afa1(%rip),%rcx │ │ │ │ + lea 0x349448(%rip),%r8 │ │ │ │ + lea 0x328d01(%rip),%rcx │ │ │ │ lea 0x4e0(%rsp),%rdx │ │ │ │ lea 0x4c0(%rsp),%rsi │ │ │ │ lea 0x56c56a(%rip),%rdi # 1020c00 ::id@GLIBCXX_3.4+0x64c0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ef0e(%rip),%rsi # d235b5 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f28f5> │ │ │ │ lea 0x520(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f04a(%rip),%rsi # d2370a std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a4a> │ │ │ │ lea 0x500(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34270c(%rip),%r8 │ │ │ │ - lea 0x331f25(%rip),%rcx │ │ │ │ + lea 0x32e5cc(%rip),%r8 │ │ │ │ + lea 0x3395e5(%rip),%rcx │ │ │ │ lea 0x520(%rsp),%rdx │ │ │ │ lea 0x500(%rsp),%rsi │ │ │ │ lea 0x56c55e(%rip),%rdi # 1020c50 ::id@GLIBCXX_3.4+0x6510> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ef41(%rip),%rsi # d23644 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2984> │ │ │ │ lea 0x560(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ef52(%rip),%rsi # d2366e std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29ae> │ │ │ │ lea 0x540(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33dcd0(%rip),%r8 │ │ │ │ - lea 0x320b09(%rip),%rcx │ │ │ │ + lea 0x33cf50(%rip),%r8 │ │ │ │ + lea 0x33f0a9(%rip),%rcx │ │ │ │ lea 0x560(%rsp),%rdx │ │ │ │ lea 0x540(%rsp),%rsi │ │ │ │ lea 0x56c552(%rip),%rdi # 1020ca0 ::id@GLIBCXX_3.4+0x6560> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f2be(%rip),%rsi # d23a1d std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d5d> │ │ │ │ lea 0x5a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26f2b8(%rip),%rsi # d23a30 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d70> │ │ │ │ lea 0x580(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x326e54(%rip),%r8 │ │ │ │ - lea 0x3274ad(%rip),%rcx │ │ │ │ + lea 0x323cb4(%rip),%r8 │ │ │ │ + lea 0x33b0ad(%rip),%rcx │ │ │ │ lea 0x5a0(%rsp),%rdx │ │ │ │ lea 0x580(%rsp),%rsi │ │ │ │ lea 0x56c546(%rip),%rdi # 1020cf0 ::id@GLIBCXX_3.4+0x65b0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ef5f(%rip),%rsi # d2371a std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a5a> │ │ │ │ lea 0x5e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ee91(%rip),%rsi # d23665 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29a5> │ │ │ │ lea 0x5c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32c478(%rip),%r8 │ │ │ │ - lea 0x32cb91(%rip),%rcx │ │ │ │ + lea 0x34c078(%rip),%r8 │ │ │ │ + lea 0x347331(%rip),%rcx │ │ │ │ lea 0x5e0(%rsp),%rdx │ │ │ │ lea 0x5c0(%rsp),%rsi │ │ │ │ lea 0x56c53a(%rip),%rdi # 1020d40 ::id@GLIBCXX_3.4+0x6600> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ef15(%rip),%rsi # d2372c std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a6c> │ │ │ │ lea 0x620(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ee35(%rip),%rsi # d23665 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f29a5> │ │ │ │ lea 0x600(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32d57c(%rip),%r8 │ │ │ │ - lea 0x32cb35(%rip),%rcx │ │ │ │ + lea 0x32f09c(%rip),%r8 │ │ │ │ + lea 0x3472d5(%rip),%rcx │ │ │ │ lea 0x620(%rsp),%rdx │ │ │ │ lea 0x600(%rsp),%rsi │ │ │ │ lea 0x56c52e(%rip),%rdi # 1020d90 ::id@GLIBCXX_3.4+0x6650> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eed0(%rip),%rsi # d23743 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a83> │ │ │ │ lea 0x660(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eec9(%rip),%rsi # d23755 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2a95> │ │ │ │ lea 0x640(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x344160(%rip),%r8 │ │ │ │ - lea 0x3445b9(%rip),%rcx │ │ │ │ + lea 0x320d40(%rip),%r8 │ │ │ │ + lea 0x3316b9(%rip),%rcx │ │ │ │ lea 0x660(%rsp),%rdx │ │ │ │ lea 0x640(%rsp),%rsi │ │ │ │ lea 0x56c522(%rip),%rdi # 1020de0 ::id@GLIBCXX_3.4+0x66a0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ee98(%rip),%rsi # d23767 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2aa7> │ │ │ │ lea 0x6a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ee89(%rip),%rsi # d23771 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2ab1> │ │ │ │ lea 0x680(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x337004(%rip),%r8 │ │ │ │ - lea 0x33745d(%rip),%rcx │ │ │ │ + lea 0x349a04(%rip),%r8 │ │ │ │ + lea 0x32da5d(%rip),%rcx │ │ │ │ lea 0x6a0(%rsp),%rdx │ │ │ │ lea 0x680(%rsp),%rsi │ │ │ │ lea 0x56c516(%rip),%rdi # 1020e30 ::id@GLIBCXX_3.4+0x66f0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ee50(%rip),%rsi # d2377b std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2abb> │ │ │ │ lea 0x6e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ee4e(%rip),%rsi # d23792 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2ad2> │ │ │ │ lea 0x6c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x344e08(%rip),%r8 │ │ │ │ - lea 0x3326c1(%rip),%rcx │ │ │ │ + lea 0x322e48(%rip),%r8 │ │ │ │ + lea 0x33e501(%rip),%rcx │ │ │ │ lea 0x6e0(%rsp),%rdx │ │ │ │ lea 0x6c0(%rsp),%rsi │ │ │ │ lea 0x56c50a(%rip),%rdi # 1020e80 ::id@GLIBCXX_3.4+0x6740> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26edf4(%rip),%rsi # d2377b std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2abb> │ │ │ │ lea 0x720(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ee0a(%rip),%rsi # d237aa std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2aea> │ │ │ │ lea 0x700(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x344dac(%rip),%r8 │ │ │ │ - lea 0x3311c5(%rip),%rcx │ │ │ │ + lea 0x322dec(%rip),%r8 │ │ │ │ + lea 0x33d1e5(%rip),%rcx │ │ │ │ lea 0x720(%rsp),%rdx │ │ │ │ lea 0x700(%rsp),%rsi │ │ │ │ lea 0x56c4fe(%rip),%rdi # 1020ed0 ::id@GLIBCXX_3.4+0x6790> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26edd7(%rip),%rsi # d237ba std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2afa> │ │ │ │ lea 0x760(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26edd1(%rip),%rsi # d237cd std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b0d> │ │ │ │ lea 0x740(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x3387b0(%rip),%r8 │ │ │ │ - lea 0x338d49(%rip),%rcx │ │ │ │ + lea 0x340270(%rip),%r8 │ │ │ │ + lea 0x3425e9(%rip),%rcx │ │ │ │ lea 0x760(%rsp),%rdx │ │ │ │ lea 0x740(%rsp),%rsi │ │ │ │ lea 0x56c4f2(%rip),%rdi # 1020f20 ::id@GLIBCXX_3.4+0x67e0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eda1(%rip),%rsi # d237e0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b20> │ │ │ │ lea 0x7a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ed94(%rip),%rsi # d237ec std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b2c> │ │ │ │ lea 0x780(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x3496d4(%rip),%r8 │ │ │ │ - lea 0x3499cd(%rip),%rcx │ │ │ │ + lea 0x325334(%rip),%r8 │ │ │ │ + lea 0x339c6d(%rip),%rcx │ │ │ │ lea 0x7a0(%rsp),%rdx │ │ │ │ lea 0x780(%rsp),%rsi │ │ │ │ lea 0x56c4e6(%rip),%rdi # 1020f70 ::id@GLIBCXX_3.4+0x6830> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ed5d(%rip),%rsi # d237f8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b38> │ │ │ │ lea 0x7e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ed57(%rip),%rsi # d2380b std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b4b> │ │ │ │ lea 0x7c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34b2f8(%rip),%r8 │ │ │ │ - lea 0x34b791(%rip),%rcx │ │ │ │ + lea 0x320f78(%rip),%r8 │ │ │ │ + lea 0x347a91(%rip),%rcx │ │ │ │ lea 0x7e0(%rsp),%rdx │ │ │ │ lea 0x7c0(%rsp),%rsi │ │ │ │ lea 0x56c4da(%rip),%rdi # 1020fc0 ::id@GLIBCXX_3.4+0x6880> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ed27(%rip),%rsi # d2381e std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b5e> │ │ │ │ lea 0x820(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ed18(%rip),%rsi # d23828 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b68> │ │ │ │ lea 0x800(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x332e7c(%rip),%r8 │ │ │ │ - lea 0x333715(%rip),%rcx │ │ │ │ + lea 0x323f7c(%rip),%r8 │ │ │ │ + lea 0x3321b5(%rip),%rcx │ │ │ │ lea 0x820(%rsp),%rdx │ │ │ │ lea 0x800(%rsp),%rsi │ │ │ │ lea 0x56c4ce(%rip),%rdi # 1021010 ::id@GLIBCXX_3.4+0x68d0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ecdf(%rip),%rsi # d23832 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b72> │ │ │ │ lea 0x860(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ecbc(%rip),%rsi # d23828 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b68> │ │ │ │ lea 0x840(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x3353c0(%rip),%r8 │ │ │ │ - lea 0x3336b9(%rip),%rcx │ │ │ │ + lea 0x3346a0(%rip),%r8 │ │ │ │ + lea 0x332159(%rip),%rcx │ │ │ │ lea 0x860(%rsp),%rdx │ │ │ │ lea 0x840(%rsp),%rsi │ │ │ │ lea 0x56c4c2(%rip),%rdi # 1021060 ::id@GLIBCXX_3.4+0x6920> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ec92(%rip),%rsi # d23841 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b81> │ │ │ │ lea 0x8a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ec89(%rip),%rsi # d23851 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2b91> │ │ │ │ lea 0x880(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x334264(%rip),%r8 │ │ │ │ - lea 0x33481d(%rip),%rcx │ │ │ │ + lea 0x33f5e4(%rip),%r8 │ │ │ │ + lea 0x33615d(%rip),%rcx │ │ │ │ lea 0x8a0(%rsp),%rdx │ │ │ │ lea 0x880(%rsp),%rsi │ │ │ │ lea 0x56c4b6(%rip),%rdi # 10210b0 ::id@GLIBCXX_3.4+0x6970> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ec56(%rip),%rsi # d23861 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2ba1> │ │ │ │ lea 0x8e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ec4e(%rip),%rsi # d23872 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2bb2> │ │ │ │ lea 0x8c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x335aa8(%rip),%r8 │ │ │ │ - lea 0x336181(%rip),%rcx │ │ │ │ + lea 0x3270a8(%rip),%r8 │ │ │ │ + lea 0x348341(%rip),%rcx │ │ │ │ lea 0x8e0(%rsp),%rdx │ │ │ │ lea 0x8c0(%rsp),%rsi │ │ │ │ lea 0x56c4aa(%rip),%rdi # 1021100 ::id@GLIBCXX_3.4+0x69c0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ec1c(%rip),%rsi # d23883 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2bc3> │ │ │ │ lea 0x920(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ec14(%rip),%rsi # d23894 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2bd4> │ │ │ │ lea 0x900(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x3279ec(%rip),%r8 │ │ │ │ - lea 0x327f45(%rip),%rcx │ │ │ │ + lea 0x32124c(%rip),%r8 │ │ │ │ + lea 0x336be5(%rip),%rcx │ │ │ │ lea 0x920(%rsp),%rdx │ │ │ │ lea 0x900(%rsp),%rsi │ │ │ │ lea 0x56c49e(%rip),%rdi # 1021150 ::id@GLIBCXX_3.4+0x6a10> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e915(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0x960(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e90a(%rip),%rsi # d235e6 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2926> │ │ │ │ lea 0x940(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34bf90(%rip),%r8 │ │ │ │ - lea 0x34c529(%rip),%rcx │ │ │ │ + lea 0x338a30(%rip),%r8 │ │ │ │ + lea 0x335569(%rip),%rcx │ │ │ │ lea 0x960(%rsp),%rdx │ │ │ │ lea 0x940(%rsp),%rsi │ │ │ │ lea 0x56c492(%rip),%rdi # 10211a0 ::id@GLIBCXX_3.4+0x6a60> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e8b9(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0x9a0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e8ae(%rip),%rsi # d235e6 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2926> │ │ │ │ lea 0x980(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34bf34(%rip),%r8 │ │ │ │ - lea 0x34c4cd(%rip),%rcx │ │ │ │ + lea 0x3389d4(%rip),%r8 │ │ │ │ + lea 0x33550d(%rip),%rcx │ │ │ │ lea 0x9a0(%rsp),%rdx │ │ │ │ lea 0x980(%rsp),%rsi │ │ │ │ lea 0x56c486(%rip),%rdi # 10211f0 ::id@GLIBCXX_3.4+0x6ab0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eb2a(%rip),%rsi # d238a5 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2be5> │ │ │ │ lea 0x9e0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eb20(%rip),%rsi # d238b4 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2bf4> │ │ │ │ lea 0x9c0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32b3f8(%rip),%r8 │ │ │ │ - lea 0x32b6f1(%rip),%rcx │ │ │ │ + lea 0x342ed8(%rip),%r8 │ │ │ │ + lea 0x32e371(%rip),%rcx │ │ │ │ lea 0x9e0(%rsp),%rdx │ │ │ │ lea 0x9c0(%rsp),%rsi │ │ │ │ lea 0x56c47a(%rip),%rdi # 1021240 ::id@GLIBCXX_3.4+0x6b00> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eaec(%rip),%rsi # d238c3 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c03> │ │ │ │ lea 0xa20(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eae3(%rip),%rsi # d238d3 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c13> │ │ │ │ lea 0xa00(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33789c(%rip),%r8 │ │ │ │ - lea 0x337c35(%rip),%rcx │ │ │ │ + lea 0x32043c(%rip),%r8 │ │ │ │ + lea 0x327df5(%rip),%rcx │ │ │ │ lea 0xa20(%rsp),%rdx │ │ │ │ lea 0xa00(%rsp),%rsi │ │ │ │ lea 0x56c46e(%rip),%rdi # 1021290 ::id@GLIBCXX_3.4+0x6b50> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eab0(%rip),%rsi # d238e3 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c23> │ │ │ │ lea 0xa60(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26eaa3(%rip),%rsi # d238ef std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c2f> │ │ │ │ lea 0xa40(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x323ce0(%rip),%r8 │ │ │ │ - lea 0x3240f9(%rip),%rcx │ │ │ │ + lea 0x341d80(%rip),%r8 │ │ │ │ + lea 0x3403b9(%rip),%rcx │ │ │ │ lea 0xa60(%rsp),%rdx │ │ │ │ lea 0xa40(%rsp),%rsi │ │ │ │ lea 0x56c462(%rip),%rdi # 10212e0 ::id@GLIBCXX_3.4+0x6ba0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ea6c(%rip),%rsi # d238fb std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c3b> │ │ │ │ lea 0xaa0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ea68(%rip),%rsi # d23910 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c50> │ │ │ │ lea 0xa80(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x325964(%rip),%r8 │ │ │ │ - lea 0x325ddd(%rip),%rcx │ │ │ │ + lea 0x324a64(%rip),%r8 │ │ │ │ + lea 0x340c1d(%rip),%rcx │ │ │ │ lea 0xaa0(%rsp),%rdx │ │ │ │ lea 0xa80(%rsp),%rsi │ │ │ │ lea 0x56c456(%rip),%rdi # 1021330 ::id@GLIBCXX_3.4+0x6bf0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ea3a(%rip),%rsi # d23925 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c65> │ │ │ │ lea 0xae0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ea34(%rip),%rsi # d23938 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c78> │ │ │ │ lea 0xac0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x324cc8(%rip),%r8 │ │ │ │ - lea 0x325061(%rip),%rcx │ │ │ │ + lea 0x32ba88(%rip),%r8 │ │ │ │ + lea 0x334aa1(%rip),%rcx │ │ │ │ lea 0xae0(%rsp),%rdx │ │ │ │ lea 0xac0(%rsp),%rsi │ │ │ │ lea 0x56c44a(%rip),%rdi # 1021380 ::id@GLIBCXX_3.4+0x6c40> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26ea04(%rip),%rsi # d2394b std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c8b> │ │ │ │ lea 0xb20(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e9d8(%rip),%rsi # d23938 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c78> │ │ │ │ lea 0xb00(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x3248ac(%rip),%r8 │ │ │ │ - lea 0x325005(%rip),%rcx │ │ │ │ + lea 0x32744c(%rip),%r8 │ │ │ │ + lea 0x334a45(%rip),%rcx │ │ │ │ lea 0xb20(%rsp),%rdx │ │ │ │ lea 0xb00(%rsp),%rsi │ │ │ │ lea 0x56c43e(%rip),%rdi # 10213d0 ::id@GLIBCXX_3.4+0x6c90> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e5e5(%rip),%rsi # d23588 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f28c8> │ │ │ │ lea 0xb60(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e9a3(%rip),%rsi # d2395f std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2c9f> │ │ │ │ lea 0xb40(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x328590(%rip),%r8 │ │ │ │ - lea 0x3296a9(%rip),%rcx │ │ │ │ + lea 0x333b90(%rip),%r8 │ │ │ │ + lea 0x32f1e9(%rip),%rcx │ │ │ │ lea 0xb60(%rsp),%rdx │ │ │ │ lea 0xb40(%rsp),%rsi │ │ │ │ lea 0x56c432(%rip),%rdi # 1021420 ::id@GLIBCXX_3.4+0x6ce0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e5b6(%rip),%rsi # d235b5 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f28f5> │ │ │ │ lea 0xba0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e964(%rip),%rsi # d2397c std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2cbc> │ │ │ │ lea 0xb80(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x341db4(%rip),%r8 │ │ │ │ - lea 0x34302d(%rip),%rcx │ │ │ │ + lea 0x32dc74(%rip),%r8 │ │ │ │ + lea 0x33b24d(%rip),%rcx │ │ │ │ lea 0xba0(%rsp),%rdx │ │ │ │ lea 0xb80(%rsp),%rsi │ │ │ │ lea 0x56c426(%rip),%rdi # 1021470 ::id@GLIBCXX_3.4+0x6d30> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e553(%rip),%rsi # d235ae std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f28ee> │ │ │ │ lea 0xbe0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x29a984(%rip),%rsi # d4f9f8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x51ed38> │ │ │ │ lea 0xbc0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32f278(%rip),%r8 │ │ │ │ - lea 0x3300f1(%rip),%rcx │ │ │ │ + lea 0x343818(%rip),%r8 │ │ │ │ + lea 0x3304d1(%rip),%rcx │ │ │ │ lea 0xbe0(%rsp),%rdx │ │ │ │ lea 0xbc0(%rsp),%rsi │ │ │ │ lea 0x56c41a(%rip),%rdi # 10214c0 ::id@GLIBCXX_3.4+0x6d80> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e521(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0xc20(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e8c4(%rip),%rsi # d23994 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2cd4> │ │ │ │ lea 0xc00(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34bb9c(%rip),%r8 │ │ │ │ - lea 0x34cc15(%rip),%rcx │ │ │ │ + lea 0x33863c(%rip),%r8 │ │ │ │ + lea 0x3327f5(%rip),%rcx │ │ │ │ lea 0xc20(%rsp),%rdx │ │ │ │ lea 0xc00(%rsp),%rsi │ │ │ │ lea 0x56c40e(%rip),%rdi # 1021510 ::id@GLIBCXX_3.4+0x6dd0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e4c5(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0xc60(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e868(%rip),%rsi # d23994 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2cd4> │ │ │ │ lea 0xc40(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34bb40(%rip),%r8 │ │ │ │ - lea 0x34cbb9(%rip),%rcx │ │ │ │ + lea 0x3385e0(%rip),%r8 │ │ │ │ + lea 0x332799(%rip),%rcx │ │ │ │ lea 0xc60(%rsp),%rdx │ │ │ │ lea 0xc40(%rsp),%rsi │ │ │ │ lea 0x56c402(%rip),%rdi # 1021560 ::id@GLIBCXX_3.4+0x6e20> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e469(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0xca0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e80c(%rip),%rsi # d23994 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2cd4> │ │ │ │ lea 0xc80(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34bae4(%rip),%r8 │ │ │ │ - lea 0x34cb5d(%rip),%rcx │ │ │ │ + lea 0x338584(%rip),%r8 │ │ │ │ + lea 0x33273d(%rip),%rcx │ │ │ │ lea 0xca0(%rsp),%rdx │ │ │ │ lea 0xc80(%rsp),%rsi │ │ │ │ lea 0x56c3f6(%rip),%rdi # 10215b0 ::id@GLIBCXX_3.4+0x6e70> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e40d(%rip),%rsi # d235d8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2918> │ │ │ │ lea 0xce0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e7b0(%rip),%rsi # d23994 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2cd4> │ │ │ │ lea 0xcc0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x34ba88(%rip),%r8 │ │ │ │ - lea 0x34cb01(%rip),%rcx │ │ │ │ + lea 0x338528(%rip),%r8 │ │ │ │ + lea 0x3326e1(%rip),%rcx │ │ │ │ lea 0xce0(%rsp),%rdx │ │ │ │ lea 0xcc0(%rsp),%rsi │ │ │ │ lea 0x56c3ea(%rip),%rdi # 1021600 ::id@GLIBCXX_3.4+0x6ec0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e3cd(%rip),%rsi # d235f4 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2934> │ │ │ │ lea 0xd20(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e76c(%rip),%rsi # d239ac std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2cec> │ │ │ │ lea 0xd00(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33d6cc(%rip),%r8 │ │ │ │ - lea 0x33fde5(%rip),%rcx │ │ │ │ + lea 0x337ecc(%rip),%r8 │ │ │ │ + lea 0x349505(%rip),%rcx │ │ │ │ lea 0xd20(%rsp),%rdx │ │ │ │ lea 0xd00(%rsp),%rsi │ │ │ │ lea 0x56c3de(%rip),%rdi # 1021650 ::id@GLIBCXX_3.4+0x6f10> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e371(%rip),%rsi # d235f4 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2934> │ │ │ │ lea 0xd60(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e72c(%rip),%rsi # d239c8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d08> │ │ │ │ lea 0xd40(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33d670(%rip),%r8 │ │ │ │ - lea 0x33e6e9(%rip),%rcx │ │ │ │ + lea 0x337e70(%rip),%r8 │ │ │ │ + lea 0x328c49(%rip),%rcx │ │ │ │ lea 0xd60(%rsp),%rdx │ │ │ │ lea 0xd40(%rsp),%rsi │ │ │ │ lea 0x56c3d2(%rip),%rdi # 10216a0 ::id@GLIBCXX_3.4+0x6f60> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e6fc(%rip),%rsi # d239db std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d1b> │ │ │ │ lea 0xda0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e6ef(%rip),%rsi # d239e7 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d27> │ │ │ │ lea 0xd80(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x3459d4(%rip),%r8 │ │ │ │ - lea 0x34618d(%rip),%rcx │ │ │ │ + lea 0x341114(%rip),%r8 │ │ │ │ + lea 0x345b4d(%rip),%rcx │ │ │ │ lea 0xda0(%rsp),%rdx │ │ │ │ lea 0xd80(%rsp),%rsi │ │ │ │ lea 0x56c3c6(%rip),%rdi # 10216f0 ::id@GLIBCXX_3.4+0x6fb0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e6b8(%rip),%rsi # d239f3 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d33> │ │ │ │ lea 0xde0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e6b0(%rip),%rsi # d23a04 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d44> │ │ │ │ lea 0xdc0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x347fd8(%rip),%r8 │ │ │ │ - lea 0x348451(%rip),%rcx │ │ │ │ + lea 0x3314f8(%rip),%r8 │ │ │ │ + lea 0x32acb1(%rip),%rcx │ │ │ │ lea 0xde0(%rsp),%rdx │ │ │ │ lea 0xdc0(%rsp),%rsi │ │ │ │ lea 0x56c3ba(%rip),%rdi # 1021740 ::id@GLIBCXX_3.4+0x7000> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e67e(%rip),%rsi # d23a15 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d55> │ │ │ │ lea 0xe20(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e678(%rip),%rsi # d23a28 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d68> │ │ │ │ lea 0xe00(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x346d9c(%rip),%r8 │ │ │ │ - lea 0x347395(%rip),%rcx │ │ │ │ + lea 0x32b97c(%rip),%r8 │ │ │ │ + lea 0x344eb5(%rip),%rcx │ │ │ │ lea 0xe20(%rsp),%rdx │ │ │ │ lea 0xe00(%rsp),%rsi │ │ │ │ lea 0x56c3ae(%rip),%rdi # 1021790 ::id@GLIBCXX_3.4+0x7050> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e648(%rip),%rsi # d23a3b std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d7b> │ │ │ │ lea 0xe60(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e643(%rip),%rsi # d23a4f std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d8f> │ │ │ │ lea 0xe40(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x3447c0(%rip),%r8 │ │ │ │ - lea 0x344af9(%rip),%rcx │ │ │ │ + lea 0x348ba0(%rip),%r8 │ │ │ │ + lea 0x343959(%rip),%rcx │ │ │ │ lea 0xe60(%rsp),%rdx │ │ │ │ lea 0xe40(%rsp),%rsi │ │ │ │ lea 0x56c3a2(%rip),%rdi # 10217e0 ::id@GLIBCXX_3.4+0x70a0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e614(%rip),%rsi # d23a63 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2da3> │ │ │ │ lea 0xea0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e5e7(%rip),%rsi # d23a4f std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2d8f> │ │ │ │ lea 0xe80(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x345524(%rip),%r8 │ │ │ │ - lea 0x344a9d(%rip),%rcx │ │ │ │ + lea 0x337964(%rip),%r8 │ │ │ │ + lea 0x3438fd(%rip),%rcx │ │ │ │ lea 0xea0(%rsp),%rdx │ │ │ │ lea 0xe80(%rsp),%rsi │ │ │ │ lea 0x56c396(%rip),%rdi # 1021830 ::id@GLIBCXX_3.4+0x70f0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e5d2(%rip),%rsi # d23a7d std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2dbd> │ │ │ │ lea 0xee0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e5c8(%rip),%rsi # d23a8c std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2dcc> │ │ │ │ lea 0xec0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33ae48(%rip),%r8 │ │ │ │ - lea 0x33b681(%rip),%rcx │ │ │ │ + lea 0x33d148(%rip),%r8 │ │ │ │ + lea 0x324bc1(%rip),%rcx │ │ │ │ lea 0xee0(%rsp),%rdx │ │ │ │ lea 0xec0(%rsp),%rsi │ │ │ │ lea 0x56c38a(%rip),%rdi # 1021880 ::id@GLIBCXX_3.4+0x7140> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e594(%rip),%rsi # d23a9b std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2ddb> │ │ │ │ lea 0xf20(%rsp),%rdi │ │ │ │ @@ -2301308,43 +2301308,43 @@ │ │ │ │ lea 0xf00(%rsp),%rax │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e58c(%rip),%rsi # d23ab4 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2df4> │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x8(%rsp) │ │ │ │ call 1bd130 │ │ │ │ mov 0x8(%rsp),%rsi │ │ │ │ - lea 0x338e9f(%rip),%r8 │ │ │ │ - lea 0x33a3b8(%rip),%rcx │ │ │ │ + lea 0x349dff(%rip),%r8 │ │ │ │ + lea 0x320ef8(%rip),%rcx │ │ │ │ lea 0xf20(%rsp),%rdx │ │ │ │ lea 0x56c379(%rip),%rdi # 10218d0 ::id@GLIBCXX_3.4+0x7190> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e565(%rip),%rsi # d23acd std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2e0d> │ │ │ │ lea 0xf60(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e55b(%rip),%rsi # d23adc std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2e1c> │ │ │ │ lea 0xf40(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x33becb(%rip),%r8 │ │ │ │ - lea 0x33c644(%rip),%rcx │ │ │ │ + lea 0x332e4b(%rip),%r8 │ │ │ │ + lea 0x322684(%rip),%rcx │ │ │ │ lea 0xf60(%rsp),%rdx │ │ │ │ lea 0xf40(%rsp),%rsi │ │ │ │ lea 0x56c36d(%rip),%rdi # 1021920 ::id@GLIBCXX_3.4+0x71e0> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e527(%rip),%rsi # d23aeb std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2e2b> │ │ │ │ lea 0xfa0(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ lea 0x20(%rsp),%rdx │ │ │ │ lea 0x26e518(%rip),%rsi # d23af5 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f2e35> │ │ │ │ lea 0xf80(%rsp),%rdi │ │ │ │ call 1bd130 │ │ │ │ - lea 0x32d0af(%rip),%r8 │ │ │ │ - lea 0x32d428(%rip),%rcx │ │ │ │ + lea 0x34ce8f(%rip),%r8 │ │ │ │ + lea 0x3253a8(%rip),%rcx │ │ │ │ lea 0xfa0(%rsp),%rdx │ │ │ │ lea 0xf80(%rsp),%rsi │ │ │ │ lea 0x56c361(%rip),%rdi # 1021970 ::id@GLIBCXX_3.4+0x7230> │ │ │ │ call ac13a0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x2906e0> │ │ │ │ mov %rbp,%rsi │ │ │ │ lea 0x5619ca(%rip),%rdx │ │ │ │ lea 0xbbab(%rip),%rdi # ac11d0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x290510> │ │ │ │ @@ -2624505,15 +2624505,15 @@ │ │ │ │ mov %rbx,%rax │ │ │ │ movq $0x1b,0x8(%rbx) │ │ │ │ pop %rbx │ │ │ │ ret │ │ │ │ nop │ │ │ │ cs nopw 0x0(%rax,%rax,1) │ │ │ │ endbr64 │ │ │ │ - mov $0x3fb99,%eax │ │ │ │ + mov $0x3fb9e,%eax │ │ │ │ ret │ │ │ │ nopw 0x0(%rax,%rax,1) │ │ │ │ endbr64 │ │ │ │ push %rbx │ │ │ │ xor %ecx,%ecx │ │ │ │ mov $0x11,%esi │ │ │ │ lea 0x105298(%rip),%rdx # d21efb std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x4f123b> │ │ │ ├── readelf --wide --decompress --hex-dump=.rodata {} │ │ │ │ @@ -20818,15 +20818,15 @@ │ │ │ │ 0x00d604f0 616e6963 6d617073 2e617070 2f222c22 anicmaps.app/"," │ │ │ │ 0x00d60500 68747470 733a2f2f 63646e2d 756b312e https://cdn-uk1. │ │ │ │ 0x00d60510 6f726761 6e69636d 6170732e 6170702f organicmaps.app/ │ │ │ │ 0x00d60520 222c2268 74747073 3a2f2f63 646e2e6f ","https://cdn.o │ │ │ │ 0x00d60530 7267616e 69636d61 70732e61 70702f22 rganicmaps.app/" │ │ │ │ 0x00d60540 7eb2db97 e9fc3f3e d31e69dc 5ca2643f ~.....?>..i.\.d? │ │ │ │ 0x00d60550 098aa14c 5016853e 4cb7372d 35bbb23d ...LP..>L.7-5..= │ │ │ │ - 0x00d60560 32303236 2e31302e 31372d30 2d303030 2026.10.17-0-000 │ │ │ │ + 0x00d60560 32303236 2e31302e 32322d30 2d303030 2026.10.22-0-000 │ │ │ │ 0x00d60570 302d3030 30303030 30302d4c 696e7578 0-00000000-Linux │ │ │ │ 0x00d60580 70726f64 75637473 5f736574 74696e67 products_setting │ │ │ │ 0x00d60590 00000000 00000000 23000000 00000000 ........#....... │ │ │ │ 0x00d605a0 22706c61 63655061 67655072 6f6d7074 "placePagePrompt │ │ │ │ 0x00d605b0 00000000 00000000 0e000000 00000000 ................ │ │ │ │ 0x00d605c0 00000000 01000000 09000000 ffffffff ................ │ │ │ │ 0x00d605d0 1f000000 2f000000 f1ffffff 00000000 ..../........... │ │ │ │ @@ -50741,11605 +50741,11605 @@ │ │ │ │ 0x00dd5320 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ 0x00dd5330 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ 0x00dd5340 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ 0x00dd5350 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ 0x00dd5360 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ 0x00dd5370 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ 0x00dd5380 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd5390 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dd53a0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00dd53b0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00dd53c0 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00dd53d0 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00dd53e0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00dd53f0 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00dd5400 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00dd5410 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00dd5420 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00dd5430 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00dd5440 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00dd5450 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00dd5460 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00dd5470 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dd5480 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00dd5490 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00dd54a0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00dd54b0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00dd54c0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00dd54d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00dd54e0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00dd54f0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00dd5500 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00dd5510 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00dd5520 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00dd5530 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00dd5540 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00dd5550 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00dd5560 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00dd5570 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00dd5580 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00dd5590 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00dd55a0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00dd55b0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00dd55c0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00dd55d0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00dd55e0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00dd55f0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00dd5600 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00dd5610 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00dd5620 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dd5630 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00dd5640 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00dd5650 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dd5660 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00dd5670 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00dd5680 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00dd5690 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00dd56a0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00dd56b0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00dd56c0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00dd56d0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00dd56e0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00dd56f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dd5700 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00dd5710 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00dd5720 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00dd5730 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00dd5740 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00dd5750 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00dd5760 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00dd5770 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00dd5780 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00dd5790 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00dd57a0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00dd57b0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00dd57c0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00dd57d0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00dd57e0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00dd57f0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00dd5800 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dd5810 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00dd5820 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00dd5830 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00dd5840 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00dd5850 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00dd5860 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00dd5870 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00dd5880 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00dd5890 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00dd58a0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00dd58b0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00dd58c0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00dd58d0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00dd58e0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00dd58f0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00dd5900 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00dd5910 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00dd5920 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00dd5930 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00dd5940 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00dd5950 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00dd5960 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00dd5970 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00dd5980 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00dd5990 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00dd59a0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00dd59b0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00dd59c0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00dd59d0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00dd59e0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00dd59f0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00dd5a00 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00dd5a10 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00dd5a20 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00dd5a30 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00dd5a40 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00dd5a50 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00dd5a60 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00dd5a70 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00dd5a80 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00dd5a90 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00dd5aa0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00dd5ab0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00dd5ac0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00dd5ad0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00dd5ae0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00dd5af0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00dd5b00 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00dd5b10 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ - 0x00dd5b20 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ - 0x00dd5b30 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00dd5b40 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00dd5b50 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00dd5b60 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00dd5b70 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ - 0x00dd5b80 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ - 0x00dd5b90 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ - 0x00dd5ba0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00dd5bb0 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ - 0x00dd5bc0 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ - 0x00dd5bd0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00dd5be0 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00dd5bf0 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00dd5c00 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ - 0x00dd5c10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dd5c20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd5c30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd5c40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd5c50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd5c60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd5c70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd5c80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd5c90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd5ca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd5cb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd5cc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd5cd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd5ce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd5cf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd5d00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd5d10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd5d20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd5d30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd5d40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd5d50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd5d60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd5d70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dd5d80 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00dd5d90 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00dd5da0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00dd5db0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00dd5dc0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00dd5dd0 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ - 0x00dd5de0 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ - 0x00dd5df0 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ - 0x00dd5e00 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ - 0x00dd5e10 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ - 0x00dd5e20 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ - 0x00dd5e30 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ - 0x00dd5e40 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00dd5e50 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ - 0x00dd5e60 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ - 0x00dd5e70 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00dd5e80 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00dd5e90 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ - 0x00dd5ea0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00dd5eb0 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ - 0x00dd5ec0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00dd5ed0 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ - 0x00dd5ee0 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ - 0x00dd5ef0 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ - 0x00dd5f00 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ - 0x00dd5f10 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ - 0x00dd5f20 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ - 0x00dd5f30 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00dd5f40 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00dd5f50 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00dd5f60 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00dd5f70 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00dd5f80 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00dd5f90 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00dd5fa0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00dd5fb0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00dd5fc0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00dd5fd0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00dd5fe0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00dd5ff0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dd6000 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00dd6010 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00dd6020 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dd6030 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00dd6040 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00dd6050 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00dd6060 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00dd6070 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00dd6080 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00dd6090 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00dd60a0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00dd60b0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00dd60c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dd60d0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00dd60e0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00dd60f0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00dd6100 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00dd6110 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00dd6120 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00dd6130 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00dd6140 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00dd6150 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00dd6160 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00dd6170 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00dd6180 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00dd6190 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00dd61a0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00dd61b0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00dd61c0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00dd61d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dd61e0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00dd61f0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00dd6200 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00dd6210 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00dd6220 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00dd6230 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00dd6240 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00dd6250 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00dd6260 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00dd6270 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00dd6280 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00dd6290 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00dd62a0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00dd62b0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00dd62c0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00dd62d0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00dd62e0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00dd62f0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00dd6300 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00dd6310 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00dd6320 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00dd6330 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00dd6340 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00dd6350 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00dd6360 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00dd6370 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00dd6380 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00dd6390 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00dd63a0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00dd63b0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00dd63c0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00dd63d0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00dd63e0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00dd63f0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00dd6400 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00dd6410 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00dd6420 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00dd6430 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00dd6440 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00dd6450 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00dd6460 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00dd6470 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00dd6480 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00dd6490 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00dd64a0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00dd64b0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00dd64c0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00dd64d0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00dd64e0 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00dd64f0 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ - 0x00dd6500 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ - 0x00dd6510 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ - 0x00dd6520 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ - 0x00dd6530 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00dd6540 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ - 0x00dd6550 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ - 0x00dd6560 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ - 0x00dd6570 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ - 0x00dd6580 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ - 0x00dd6590 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ - 0x00dd65a0 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ - 0x00dd65b0 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ - 0x00dd65c0 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ - 0x00dd65d0 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ - 0x00dd65e0 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ - 0x00dd65f0 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ - 0x00dd6600 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00dd6610 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ - 0x00dd6620 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ - 0x00dd6630 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ - 0x00dd6640 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ - 0x00dd6650 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ - 0x00dd6660 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ - 0x00dd6670 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ - 0x00dd6680 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ - 0x00dd6690 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ - 0x00dd66a0 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ - 0x00dd66b0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00dd66c0 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ - 0x00dd66d0 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ - 0x00dd66e0 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ - 0x00dd66f0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00dd6700 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ - 0x00dd6710 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ - 0x00dd6720 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ - 0x00dd6730 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ - 0x00dd6740 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ - 0x00dd6750 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ - 0x00dd6760 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ - 0x00dd6770 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00dd6780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd6790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd67a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd67b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd67c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd67d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd67e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd67f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd6800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd6810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd6820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd6830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd6840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd6850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd6860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd6870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd6880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd6890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd68a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd68b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd68c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd68d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dd68e0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00dd68f0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00dd6900 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00dd6910 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00dd6920 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00dd6930 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00dd6940 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00dd6950 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00dd6960 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00dd6970 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00dd6980 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00dd6990 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00dd69a0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00dd69b0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dd69c0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00dd69d0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00dd69e0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00dd69f0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00dd6a00 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00dd6a10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00dd6a20 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00dd6a30 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00dd6a40 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00dd6a50 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00dd6a60 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00dd6a70 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00dd6a80 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00dd6a90 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00dd6aa0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00dd6ab0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00dd6ac0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00dd6ad0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00dd6ae0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00dd6af0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00dd6b00 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00dd6b10 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00dd6b20 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00dd6b30 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00dd6b40 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00dd6b50 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00dd6b60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dd6b70 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00dd6b80 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00dd6b90 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dd6ba0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00dd6bb0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00dd6bc0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00dd6bd0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00dd6be0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00dd6bf0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00dd6c00 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00dd6c10 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00dd6c20 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00dd6c30 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dd6c40 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00dd6c50 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00dd6c60 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00dd6c70 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00dd6c80 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00dd6c90 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00dd6ca0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00dd6cb0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00dd6cc0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00dd6cd0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00dd6ce0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00dd6cf0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00dd6d00 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00dd6d10 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00dd6d20 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00dd6d30 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00dd6d40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dd6d50 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00dd6d60 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00dd6d70 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00dd6d80 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00dd6d90 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00dd6da0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00dd6db0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00dd6dc0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00dd6dd0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00dd6de0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00dd6df0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00dd6e00 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00dd6e10 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00dd6e20 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00dd6e30 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00dd6e40 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00dd6e50 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00dd6e60 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00dd6e70 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00dd6e80 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00dd6e90 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00dd6ea0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00dd6eb0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00dd6ec0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00dd6ed0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00dd6ee0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00dd6ef0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00dd6f00 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00dd6f10 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00dd6f20 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00dd6f30 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00dd6f40 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00dd6f50 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00dd6f60 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00dd6f70 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00dd6f80 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00dd6f90 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00dd6fa0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00dd6fb0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00dd6fc0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00dd6fd0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00dd6fe0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00dd6ff0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00dd7000 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00dd7010 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00dd7020 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00dd7030 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00dd7040 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00dd7050 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00dd7060 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ - 0x00dd7070 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ - 0x00dd7080 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ - 0x00dd7090 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ - 0x00dd70a0 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00dd70b0 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ - 0x00dd70c0 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ - 0x00dd70d0 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ - 0x00dd70e0 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ - 0x00dd70f0 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ - 0x00dd7100 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ - 0x00dd7110 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ - 0x00dd7120 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ - 0x00dd7130 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ - 0x00dd7140 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ - 0x00dd7150 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ - 0x00dd7160 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00dd7170 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00dd7180 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00dd7190 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00dd71a0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00dd71b0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00dd71c0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00dd71d0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00dd71e0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00dd71f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dd7200 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd7210 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd7220 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd7230 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd7240 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd7250 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd7260 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd7270 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd7280 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd7290 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd72a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd72b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd72c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd72d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd72e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd72f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd7300 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd7310 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd7320 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd7330 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd7340 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00dd7350 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00dd7360 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00dd7370 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00dd7380 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00dd7390 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00dd73a0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00dd73b0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00dd73c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd73d0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00dd73e0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00dd73f0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00dd7400 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00dd7410 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00dd7420 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00dd7430 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00dd7440 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00dd7450 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dd7460 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00dd7470 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00dd7480 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00dd7490 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00dd74a0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00dd74b0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00dd74c0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00dd74d0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00dd74e0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00dd74f0 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00dd7500 6c6f6174 206b4365 6c6c5078 203d2031 loat kCellPx = 1 │ │ │ │ - 0x00dd7510 362e303b 20202020 2f2f206f 6e652064 6.0; // one d │ │ │ │ - 0x00dd7520 6f742070 65722074 696c6520 2d3e2073 ot per tile -> s │ │ │ │ - 0x00dd7530 70617273 652c2072 6567756c 61722072 parse, regular r │ │ │ │ - 0x00dd7540 6f777320 0a202063 6f6e7374 20666c6f ows . const flo │ │ │ │ - 0x00dd7550 6174206b 52616469 75735078 203d2031 at kRadiusPx = 1 │ │ │ │ - 0x00dd7560 2e363b20 0a202063 6f6e7374 20666c6f .6; . const flo │ │ │ │ - 0x00dd7570 6174206b 4461726b 656e203d 20302e38 at kDarken = 0.8 │ │ │ │ - 0x00dd7580 323b2020 20202f2f 20737562 746c6520 2; // subtle │ │ │ │ - 0x00dd7590 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00dd75a0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00dd75b0 203d2031 3030302e 303b200a 20204c4f = 1000.0; . LO │ │ │ │ - 0x00dd75c0 575f5020 76656333 204d6f64 756c6174 W_P vec3 Modulat │ │ │ │ - 0x00dd75d0 65427950 61747465 726e446f 7473284c eByPatternDots(L │ │ │ │ - 0x00dd75e0 4f575f50 20766563 3320636f 6c6f722c OW_P vec3 color, │ │ │ │ - 0x00dd75f0 20666c6f 61742064 61726b65 6e2c2066 float darken, f │ │ │ │ - 0x00dd7600 6c6f6174 20636f76 65726167 6529200a loat coverage) . │ │ │ │ - 0x00dd7610 20207b20 0a202020 20636f6e 73742066 { . const f │ │ │ │ - 0x00dd7620 6c6f6174 206b4c69 67687465 6e203d20 loat kLighten = │ │ │ │ - 0x00dd7630 302e3037 353b200a 20202020 69662028 0.075; . if ( │ │ │ │ - 0x00dd7640 646f7428 636f6c6f 722c2076 65633328 dot(color, vec3( │ │ │ │ - 0x00dd7650 302e3231 32362c20 302e3731 35322c20 0.2126, 0.7152, │ │ │ │ - 0x00dd7660 302e3037 32322929 203c2030 2e352920 0.0722)) < 0.5) │ │ │ │ - 0x00dd7670 0a202020 20202072 65747572 6e20636f . return co │ │ │ │ - 0x00dd7680 6c6f7220 2b20636f 76657261 6765202a lor + coverage * │ │ │ │ - 0x00dd7690 206b4c69 67687465 6e3b200a 20202020 kLighten; . │ │ │ │ - 0x00dd76a0 72657475 726e2063 6f6c6f72 202a206d return color * m │ │ │ │ - 0x00dd76b0 69782831 2e302c20 6461726b 656e2c20 ix(1.0, darken, │ │ │ │ - 0x00dd76c0 636f7665 72616765 293b200a 20207d20 coverage); . } │ │ │ │ - 0x00dd76d0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00dd76e0 20207b20 0a202023 69666465 6620454e { . #ifdef EN │ │ │ │ - 0x00dd76f0 41424c45 5f565446 200a2020 20204c4f ABLE_VTF . LO │ │ │ │ - 0x00dd7700 575f5020 76656334 20636f6c 6f72203d W_P vec4 color = │ │ │ │ - 0x00dd7710 20765f63 6f6c6f72 3b200a20 2023656c v_color; . #el │ │ │ │ - 0x00dd7720 7365200a 20202020 4c4f575f 50207665 se . LOW_P ve │ │ │ │ - 0x00dd7730 63342063 6f6c6f72 203d2074 65787475 c4 color = textu │ │ │ │ - 0x00dd7740 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ - 0x00dd7750 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ - 0x00dd7760 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00dd7770 20766563 32207078 203d2076 5f6d6173 vec2 px = v_mas │ │ │ │ - 0x00dd7780 6b546578 436f6f72 6473202a 2031362e kTexCoords * 16. │ │ │ │ - 0x00dd7790 303b200a 20202020 76656332 20746f43 0; . vec2 toC │ │ │ │ - 0x00dd77a0 656e7465 72203d20 28667261 63742870 enter = (fract(p │ │ │ │ - 0x00dd77b0 78202f20 6b43656c 6c507829 202d2030 x / kCellPx) - 0 │ │ │ │ - 0x00dd77c0 2e352920 2a206b43 656c6c50 783b2020 .5) * kCellPx; │ │ │ │ - 0x00dd77d0 2f2f2072 6567756c 6172206c 61747469 // regular latti │ │ │ │ - 0x00dd77e0 63652c20 6e6f206a 69747465 72200a20 ce, no jitter . │ │ │ │ - 0x00dd77f0 20202066 6c6f6174 2064203d 206c656e float d = len │ │ │ │ - 0x00dd7800 67746828 746f4365 6e746572 293b200a gth(toCenter); . │ │ │ │ - 0x00dd7810 20202020 666c6f61 74206161 203d206d float aa = m │ │ │ │ - 0x00dd7820 61782866 77696474 68287078 2e78292c ax(fwidth(px.x), │ │ │ │ - 0x00dd7830 20667769 64746828 70782e79 29293b20 fwidth(px.y)); │ │ │ │ - 0x00dd7840 0a202020 20666c6f 61742063 6f766572 . float cover │ │ │ │ - 0x00dd7850 61676520 3d20312e 30202d20 736d6f6f age = 1.0 - smoo │ │ │ │ - 0x00dd7860 74687374 6570286b 52616469 75735078 thstep(kRadiusPx │ │ │ │ - 0x00dd7870 202d2061 612c206b 52616469 75735078 - aa, kRadiusPx │ │ │ │ - 0x00dd7880 202b2061 612c2064 293b200a 20202020 + aa, d); . │ │ │ │ - 0x00dd7890 636f6c6f 722e7267 62203d20 4d6f6475 color.rgb = Modu │ │ │ │ - 0x00dd78a0 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ - 0x00dd78b0 7328636f 6c6f722e 7267622c 206b4461 s(color.rgb, kDa │ │ │ │ - 0x00dd78c0 726b656e 2c20636f 76657261 6765293b rken, coverage); │ │ │ │ - 0x00dd78d0 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ - 0x00dd78e0 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ - 0x00dd78f0 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ - 0x00dd7900 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00dd7910 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dd7920 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd7930 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd7940 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd7950 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd7960 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd7970 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd7980 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd7990 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd79a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd79b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd79c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd79d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd79e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd79f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd7a00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd7a10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd7a20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd7a30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd7a40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd7a50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd7a60 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00dd7a70 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00dd7a80 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00dd7a90 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00dd7aa0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00dd7ab0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00dd7ac0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00dd7ad0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00dd7ae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd7af0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00dd7b00 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00dd7b10 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00dd7b20 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00dd7b30 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00dd7b40 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00dd7b50 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00dd7b60 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00dd7b70 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dd7b80 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00dd7b90 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00dd7ba0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00dd7bb0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00dd7bc0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00dd7bd0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00dd7be0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00dd7bf0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00dd7c00 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00dd7c10 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00dd7c20 6c6f6174 206b4365 6c6c5078 203d2034 loat kCellPx = 4 │ │ │ │ - 0x00dd7c30 2e303b20 20202020 2020202f 2f206465 .0; // de │ │ │ │ - 0x00dd7c40 6e736572 20746861 6e207374 6970706c nser than stippl │ │ │ │ - 0x00dd7c50 65202864 69766964 65732074 68652031 e (divides the 1 │ │ │ │ - 0x00dd7c60 36707820 74696c65 2c20736f 2063656c 6px tile, so cel │ │ │ │ - 0x00dd7c70 6c732074 696c6520 7365616d 6c657373 ls tile seamless │ │ │ │ - 0x00dd7c80 6c792920 0a202063 6f6e7374 20666c6f ly) . const flo │ │ │ │ - 0x00dd7c90 6174206b 42617365 52616469 75735078 at kBaseRadiusPx │ │ │ │ - 0x00dd7ca0 203d2030 2e373b20 0a202063 6f6e7374 = 0.7; . const │ │ │ │ - 0x00dd7cb0 20666c6f 6174206b 52616469 75735661 float kRadiusVa │ │ │ │ - 0x00dd7cc0 72203d20 302e363b 20202020 202f2f20 r = 0.6; // │ │ │ │ - 0x00dd7cd0 7065722d 63656c6c 20726164 69757320 per-cell radius │ │ │ │ - 0x00dd7ce0 76617269 6174696f 6e202d3e 20697272 variation -> irr │ │ │ │ - 0x00dd7cf0 6567756c 61722073 697a6573 200a2020 egular sizes . │ │ │ │ - 0x00dd7d00 636f6e73 7420666c 6f617420 6b4a6974 const float kJit │ │ │ │ - 0x00dd7d10 74657220 3d20302e 353b2020 20202020 ter = 0.5; │ │ │ │ - 0x00dd7d20 20202f2f 206b6565 70206b4a 69747465 // keep kJitte │ │ │ │ - 0x00dd7d30 722a302e 352a6b43 656c6c50 78202b20 r*0.5*kCellPx + │ │ │ │ - 0x00dd7d40 6d617852 61646975 73203c20 6b43656c maxRadius < kCel │ │ │ │ - 0x00dd7d50 6c50782a 302e3520 0a202063 6f6e7374 lPx*0.5 . const │ │ │ │ - 0x00dd7d60 20666c6f 6174206b 4461726b 656e203d float kDarken = │ │ │ │ - 0x00dd7d70 20302e37 383b200a 2020666c 6f617420 0.78; . float │ │ │ │ - 0x00dd7d80 48617368 28766563 32207029 200a2020 Hash(vec2 p) . │ │ │ │ - 0x00dd7d90 7b200a20 20202070 203d2066 72616374 { . p = fract │ │ │ │ - 0x00dd7da0 2870202a 20766563 32283132 372e312c (p * vec2(127.1, │ │ │ │ - 0x00dd7db0 20333131 2e372929 3b200a20 20202070 311.7)); . p │ │ │ │ - 0x00dd7dc0 202b3d20 646f7428 702c2070 202b2033 += dot(p, p + 3 │ │ │ │ - 0x00dd7dd0 342e3233 293b200a 20202020 72657475 4.23); . retu │ │ │ │ - 0x00dd7de0 726e2066 72616374 28702e78 202a2070 rn fract(p.x * p │ │ │ │ - 0x00dd7df0 2e79293b 200a2020 7d200a20 20636f6e .y); . } . con │ │ │ │ - 0x00dd7e00 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00dd7e10 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00dd7e20 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ - 0x00dd7e30 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ - 0x00dd7e40 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ - 0x00dd7e50 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ - 0x00dd7e60 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ - 0x00dd7e70 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ - 0x00dd7e80 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ - 0x00dd7e90 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ - 0x00dd7ea0 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ - 0x00dd7eb0 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ - 0x00dd7ec0 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ - 0x00dd7ed0 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ - 0x00dd7ee0 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ - 0x00dd7ef0 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ - 0x00dd7f00 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ - 0x00dd7f10 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ - 0x00dd7f20 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ - 0x00dd7f30 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ - 0x00dd7f40 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00dd7f50 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00dd7f60 5446200a 20202020 4c4f575f 50207665 TF . LOW_P ve │ │ │ │ - 0x00dd7f70 63342063 6f6c6f72 203d2076 5f636f6c c4 color = v_col │ │ │ │ - 0x00dd7f80 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ - 0x00dd7f90 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ - 0x00dd7fa0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00dd7fb0 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ - 0x00dd7fc0 54657843 6f6f7264 73293b20 0a202023 TexCoords); . # │ │ │ │ - 0x00dd7fd0 656e6469 66200a20 20202076 65633220 endif . vec2 │ │ │ │ - 0x00dd7fe0 7078203d 20765f6d 61736b54 6578436f px = v_maskTexCo │ │ │ │ - 0x00dd7ff0 6f726473 202a2031 362e303b 200a2020 ords * 16.0; . │ │ │ │ - 0x00dd8000 20207665 63322063 656c6c20 3d20666c vec2 cell = fl │ │ │ │ - 0x00dd8010 6f6f7228 7078202f 206b4365 6c6c5078 oor(px / kCellPx │ │ │ │ - 0x00dd8020 293b200a 20202020 76656332 20746f43 ); . vec2 toC │ │ │ │ - 0x00dd8030 656e7465 72203d20 0a202020 20202020 enter = . │ │ │ │ - 0x00dd8040 20286672 61637428 7078202f 206b4365 (fract(px / kCe │ │ │ │ - 0x00dd8050 6c6c5078 29202d20 302e3529 202a206b llPx) - 0.5) * k │ │ │ │ - 0x00dd8060 43656c6c 5078202d 20287665 63322848 CellPx - (vec2(H │ │ │ │ - 0x00dd8070 61736828 63656c6c 292c2048 61736828 ash(cell), Hash( │ │ │ │ - 0x00dd8080 63656c6c 202b2031 392e3729 29202d20 cell + 19.7)) - │ │ │ │ - 0x00dd8090 302e3529 202a2028 6b4a6974 74657220 0.5) * (kJitter │ │ │ │ - 0x00dd80a0 2a206b43 656c6c50 78293b20 0a202020 * kCellPx); . │ │ │ │ - 0x00dd80b0 20666c6f 61742072 61646975 73203d20 float radius = │ │ │ │ - 0x00dd80c0 6b426173 65526164 69757350 78202a20 kBaseRadiusPx * │ │ │ │ - 0x00dd80d0 28312e30 202d206b 52616469 75735661 (1.0 - kRadiusVa │ │ │ │ - 0x00dd80e0 72202a20 302e3520 2b206b52 61646975 r * 0.5 + kRadiu │ │ │ │ - 0x00dd80f0 73566172 202a2048 61736828 63656c6c sVar * Hash(cell │ │ │ │ - 0x00dd8100 202b2033 2e372929 3b200a20 20202066 + 3.7)); . f │ │ │ │ - 0x00dd8110 6c6f6174 2064203d 206c656e 67746828 loat d = length( │ │ │ │ - 0x00dd8120 746f4365 6e746572 293b200a 20202020 toCenter); . │ │ │ │ - 0x00dd8130 666c6f61 74206161 203d206d 61782866 float aa = max(f │ │ │ │ - 0x00dd8140 77696474 68287078 2e78292c 20667769 width(px.x), fwi │ │ │ │ - 0x00dd8150 64746828 70782e79 29293b20 0a202020 dth(px.y)); . │ │ │ │ - 0x00dd8160 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ - 0x00dd8170 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ - 0x00dd8180 65702872 61646975 73202d20 61612c20 ep(radius - aa, │ │ │ │ - 0x00dd8190 72616469 7573202b 2061612c 2064293b radius + aa, d); │ │ │ │ - 0x00dd81a0 200a2020 2020636f 6c6f722e 72676220 . color.rgb │ │ │ │ - 0x00dd81b0 3d204d6f 64756c61 74654279 50617474 = ModulateByPatt │ │ │ │ - 0x00dd81c0 65726e44 6f747328 636f6c6f 722e7267 ernDots(color.rg │ │ │ │ - 0x00dd81d0 622c206b 4461726b 656e2c20 636f7665 b, kDarken, cove │ │ │ │ - 0x00dd81e0 72616765 293b200a 20202020 636f6c6f rage); . colo │ │ │ │ - 0x00dd81f0 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ - 0x00dd8200 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00dd8210 6f72203d 20636f6c 6f723b20 0a20207d or = color; . } │ │ │ │ - 0x00dd8220 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00dd8230 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dd8240 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd8250 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd8260 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd8270 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd8280 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd8290 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd82a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd82b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd82c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd82d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd82e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd82f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd8300 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd8310 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd8320 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd8330 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd8340 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd8350 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd8360 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd8370 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd8380 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00dd8390 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00dd83a0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00dd83b0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00dd83c0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00dd83d0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00dd83e0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00dd83f0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00dd8400 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd8410 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00dd8420 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00dd8430 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00dd8440 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00dd8450 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00dd8460 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00dd8470 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00dd8480 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00dd8490 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dd84a0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00dd84b0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00dd84c0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00dd84d0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00dd84e0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00dd84f0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00dd8500 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00dd8510 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00dd8520 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00dd8530 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00dd8540 6c6f6174 206b4365 6c6c5078 203d2038 loat kCellPx = 8 │ │ │ │ - 0x00dd8550 2e303b20 20202020 2f2f2064 6f74206c .0; // dot l │ │ │ │ - 0x00dd8560 61747469 63652063 656c6c20 28646976 attice cell (div │ │ │ │ - 0x00dd8570 69646573 20746865 20313670 78207469 ides the 16px ti │ │ │ │ - 0x00dd8580 6c652c20 736f2063 656c6c73 2074696c le, so cells til │ │ │ │ - 0x00dd8590 65207365 616d6c65 73736c79 29200a20 e seamlessly) . │ │ │ │ - 0x00dd85a0 20636f6e 73742066 6c6f6174 206b5261 const float kRa │ │ │ │ - 0x00dd85b0 64697573 5078203d 20312e32 3b202020 diusPx = 1.2; │ │ │ │ - 0x00dd85c0 2f2f2064 6f742072 61646975 73200a20 // dot radius . │ │ │ │ - 0x00dd85d0 20636f6e 73742066 6c6f6174 206b4a69 const float kJi │ │ │ │ - 0x00dd85e0 74746572 203d2030 2e35353b 20202020 tter = 0.55; │ │ │ │ - 0x00dd85f0 2f2f206b 65657020 6b4a6974 7465722a // keep kJitter* │ │ │ │ - 0x00dd8600 302e352a 6b43656c 6c507820 2b206b52 0.5*kCellPx + kR │ │ │ │ - 0x00dd8610 61646975 73507820 3c206b43 656c6c50 adiusPx < kCellP │ │ │ │ - 0x00dd8620 782a302e 35202864 6f747320 73746179 x*0.5 (dots stay │ │ │ │ - 0x00dd8630 20696e20 63656c6c 29200a20 20636f6e in cell) . con │ │ │ │ - 0x00dd8640 73742066 6c6f6174 206b4461 726b656e st float kDarken │ │ │ │ - 0x00dd8650 203d2030 2e38303b 20202020 2f2f2073 = 0.80; // s │ │ │ │ - 0x00dd8660 75726661 6365206d 756c7469 706c6965 urface multiplie │ │ │ │ - 0x00dd8670 7220756e 64657220 6120646f 74206f6e r under a dot on │ │ │ │ - 0x00dd8680 2061206c 69676874 2066696c 6c202867 a light fill (g │ │ │ │ - 0x00dd8690 656e746c 65202d20 74657874 75726520 entle - texture │ │ │ │ - 0x00dd86a0 73686f75 6c642077 68697370 65722920 should whisper) │ │ │ │ - 0x00dd86b0 0a202066 6c6f6174 20486173 68287665 . float Hash(ve │ │ │ │ - 0x00dd86c0 63322070 29200a20 207b200a 20202020 c2 p) . { . │ │ │ │ - 0x00dd86d0 70203d20 66726163 74287020 2a207665 p = fract(p * ve │ │ │ │ - 0x00dd86e0 63322831 32372e31 2c203331 312e3729 c2(127.1, 311.7) │ │ │ │ - 0x00dd86f0 293b200a 20202020 70202b3d 20646f74 ); . p += dot │ │ │ │ - 0x00dd8700 28702c20 70202b20 33342e32 33293b20 (p, p + 34.23); │ │ │ │ - 0x00dd8710 0a202020 20726574 75726e20 66726163 . return frac │ │ │ │ - 0x00dd8720 7428702e 78202a20 702e7929 3b200a20 t(p.x * p.y); . │ │ │ │ - 0x00dd8730 207d200a 2020636f 6e737420 666c6f61 } . const floa │ │ │ │ - 0x00dd8740 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00dd8750 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00dd8760 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ - 0x00dd8770 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ - 0x00dd8780 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ - 0x00dd8790 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ - 0x00dd87a0 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ - 0x00dd87b0 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ - 0x00dd87c0 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ - 0x00dd87d0 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ - 0x00dd87e0 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ - 0x00dd87f0 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ - 0x00dd8800 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ - 0x00dd8810 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ - 0x00dd8820 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ - 0x00dd8830 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ - 0x00dd8840 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ - 0x00dd8850 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ - 0x00dd8860 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ - 0x00dd8870 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00dd8880 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ - 0x00dd8890 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00dd88a0 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ - 0x00dd88b0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ - 0x00dd88c0 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ - 0x00dd88d0 20766563 3420636f 6c6f7220 3d207465 vec4 color = te │ │ │ │ - 0x00dd88e0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00dd88f0 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ - 0x00dd8900 6473293b 200a2020 23656e64 6966200a ds); . #endif . │ │ │ │ - 0x00dd8910 20202020 76656332 20707820 3d20765f vec2 px = v_ │ │ │ │ - 0x00dd8920 6d61736b 54657843 6f6f7264 73202a20 maskTexCoords * │ │ │ │ - 0x00dd8930 31362e30 3b200a20 20202076 65633220 16.0; . vec2 │ │ │ │ - 0x00dd8940 63656c6c 203d2066 6c6f6f72 28707820 cell = floor(px │ │ │ │ - 0x00dd8950 2f206b43 656c6c50 78293b20 0a202020 / kCellPx); . │ │ │ │ - 0x00dd8960 20766563 3220746f 43656e74 6572203d vec2 toCenter = │ │ │ │ - 0x00dd8970 200a2020 20202020 20202866 72616374 . (fract │ │ │ │ - 0x00dd8980 28707820 2f206b43 656c6c50 7829202d (px / kCellPx) - │ │ │ │ - 0x00dd8990 20302e35 29202a20 6b43656c 6c507820 0.5) * kCellPx │ │ │ │ - 0x00dd89a0 2d202876 65633228 48617368 2863656c - (vec2(Hash(cel │ │ │ │ - 0x00dd89b0 6c292c20 48617368 2863656c 6c202b20 l), Hash(cell + │ │ │ │ - 0x00dd89c0 31392e37 2929202d 20302e35 29202a20 19.7)) - 0.5) * │ │ │ │ - 0x00dd89d0 286b4a69 74746572 202a206b 43656c6c (kJitter * kCell │ │ │ │ - 0x00dd89e0 5078293b 200a2020 2020666c 6f617420 Px); . float │ │ │ │ - 0x00dd89f0 64203d20 6c656e67 74682874 6f43656e d = length(toCen │ │ │ │ - 0x00dd8a00 74657229 3b200a20 20202066 6c6f6174 ter); . float │ │ │ │ - 0x00dd8a10 20616120 3d206d61 78286677 69647468 aa = max(fwidth │ │ │ │ - 0x00dd8a20 2870782e 78292c20 66776964 74682870 (px.x), fwidth(p │ │ │ │ - 0x00dd8a30 782e7929 293b2020 2f2f2063 6f6e7469 x.y)); // conti │ │ │ │ - 0x00dd8a40 6e756f75 7320636f 6f72643a 206e6f20 nuous coord: no │ │ │ │ - 0x00dd8a50 66726163 742d7365 616d2064 65726976 fract-seam deriv │ │ │ │ - 0x00dd8a60 61746976 65207370 696b6520 0a202020 ative spike . │ │ │ │ - 0x00dd8a70 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ - 0x00dd8a80 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ - 0x00dd8a90 6570286b 52616469 75735078 202d2061 ep(kRadiusPx - a │ │ │ │ - 0x00dd8aa0 612c206b 52616469 75735078 202b2061 a, kRadiusPx + a │ │ │ │ - 0x00dd8ab0 612c2064 293b200a 20202020 636f6c6f a, d); . colo │ │ │ │ - 0x00dd8ac0 722e7267 62203d20 4d6f6475 6c617465 r.rgb = Modulate │ │ │ │ - 0x00dd8ad0 42795061 74746572 6e446f74 7328636f ByPatternDots(co │ │ │ │ - 0x00dd8ae0 6c6f722e 7267622c 206b4461 726b656e lor.rgb, kDarken │ │ │ │ - 0x00dd8af0 2c20636f 76657261 6765293b 200a2020 , coverage); . │ │ │ │ - 0x00dd8b00 2020636f 6c6f722e 61202a3d 20755f6f color.a *= u_o │ │ │ │ - 0x00dd8b10 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ - 0x00dd8b20 72616743 6f6c6f72 203d2063 6f6c6f72 ragColor = color │ │ │ │ - 0x00dd8b30 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00dd8b40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd8b50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd8b60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd8b70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd8b80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd8b90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd8ba0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd8bb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd8bc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd8bd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd8be0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd8bf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd8c00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd8c10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd8c20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd8c30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd8c40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd8c50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd8c60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd8c70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd8c80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd8c90 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00dd8ca0 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00dd8cb0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00dd8cc0 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ - 0x00dd8cd0 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ - 0x00dd8ce0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ - 0x00dd8cf0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00dd8d00 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00dd8d10 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ - 0x00dd8d20 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ - 0x00dd8d30 673b200a 2020636f 6e737420 76656333 g; . const vec3 │ │ │ │ - 0x00dd8d40 206c6967 68744469 72203d20 76656333 lightDir = vec3 │ │ │ │ - 0x00dd8d50 28302e33 31362c20 302e302c 20302e39 (0.316, 0.0, 0.9 │ │ │ │ - 0x00dd8d60 3438293b 200a2020 636f6e73 7420666c 48); . const fl │ │ │ │ - 0x00dd8d70 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00dd8d80 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00dd8d90 0a20204c 4f575f50 20766563 33204d6f . LOW_P vec3 Mo │ │ │ │ - 0x00dd8da0 64756c61 74654279 50617474 65726e44 dulateByPatternD │ │ │ │ - 0x00dd8db0 6f747328 4c4f575f 50207665 63332063 ots(LOW_P vec3 c │ │ │ │ - 0x00dd8dc0 6f6c6f72 2c20666c 6f617420 6461726b olor, float dark │ │ │ │ - 0x00dd8dd0 656e2c20 666c6f61 7420636f 76657261 en, float covera │ │ │ │ - 0x00dd8de0 67652920 0a20207b 200a2020 2020636f ge) . { . co │ │ │ │ - 0x00dd8df0 6e737420 666c6f61 74206b4c 69676874 nst float kLight │ │ │ │ - 0x00dd8e00 656e203d 20302e30 37353b20 0a202020 en = 0.075; . │ │ │ │ - 0x00dd8e10 20696620 28646f74 28636f6c 6f722c20 if (dot(color, │ │ │ │ - 0x00dd8e20 76656333 28302e32 3132362c 20302e37 vec3(0.2126, 0.7 │ │ │ │ - 0x00dd8e30 3135322c 20302e30 37323229 29203c20 152, 0.0722)) < │ │ │ │ - 0x00dd8e40 302e3529 200a2020 20202020 72657475 0.5) . retu │ │ │ │ - 0x00dd8e50 726e2063 6f6c6f72 202b2063 6f766572 rn color + cover │ │ │ │ - 0x00dd8e60 61676520 2a206b4c 69676874 656e3b20 age * kLighten; │ │ │ │ - 0x00dd8e70 0a202020 20726574 75726e20 636f6c6f . return colo │ │ │ │ - 0x00dd8e80 72202a20 6d697828 312e302c 20646172 r * mix(1.0, dar │ │ │ │ - 0x00dd8e90 6b656e2c 20636f76 65726167 65293b20 ken, coverage); │ │ │ │ - 0x00dd8ea0 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00dd8eb0 6e282920 0a20207b 200a2020 2020666c n() . { . fl │ │ │ │ - 0x00dd8ec0 6f617420 70686f6e 67446966 66757365 oat phongDiffuse │ │ │ │ - 0x00dd8ed0 203d206d 61782830 2e302c20 2d646f74 = max(0.0, -dot │ │ │ │ - 0x00dd8ee0 286c6967 68744469 722c2076 5f6e6f72 (lightDir, v_nor │ │ │ │ - 0x00dd8ef0 6d616c29 293b200a 20202020 765f4672 mal)); . v_Fr │ │ │ │ - 0x00dd8f00 6167436f 6c6f7220 3d207665 63342828 agColor = vec4(( │ │ │ │ - 0x00dd8f10 70686f6e 67446966 66757365 202a2030 phongDiffuse * 0 │ │ │ │ - 0x00dd8f20 2e35202b 20302e35 29202a20 755f636f .5 + 0.5) * u_co │ │ │ │ - 0x00dd8f30 6c6f722e 7267622c 20755f63 6f6c6f72 lor.rgb, u_color │ │ │ │ - 0x00dd8f40 2e61293b 200a2020 7d200a00 00000000 .a); . } ...... │ │ │ │ - 0x00dd8f50 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dd8f60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd8f70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd8f80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd8f90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd8fa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd8fb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd8fc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd8fd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd8fe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd8ff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd9000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd9010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd9020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd9030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd9040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd9050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd9060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd9070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd9080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd9090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd90a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dd90b0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00dd90c0 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00dd90d0 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ - 0x00dd90e0 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ - 0x00dd90f0 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ - 0x00dd9100 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00dd9110 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ - 0x00dd9120 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00dd9130 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ - 0x00dd9140 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00dd9150 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ - 0x00dd9160 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00dd9170 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00dd9180 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00dd9190 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00dd91a0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00dd91b0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00dd91c0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00dd91d0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00dd91e0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00dd91f0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00dd9200 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00dd9210 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00dd9220 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00dd9230 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00dd9240 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00dd9250 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00dd9260 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00dd9270 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00dd9280 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00dd9290 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00dd92a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dd92b0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00dd92c0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00dd92d0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00dd92e0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00dd92f0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00dd9300 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00dd9310 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00dd9320 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00dd9330 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00dd9340 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00dd9350 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00dd9360 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00dd9370 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00dd9380 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00dd9390 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00dd93a0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00dd93b0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00dd93c0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00dd93d0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00dd93e0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00dd93f0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00dd9400 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00dd9410 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00dd9420 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00dd9430 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00dd9440 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00dd9450 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00dd9460 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00dd9470 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00dd9480 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00dd9490 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00dd94a0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00dd94b0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00dd94c0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00dd94d0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00dd94e0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00dd94f0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00dd9500 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00dd9510 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00dd9520 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00dd9530 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00dd9540 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00dd9550 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00dd9560 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00dd9570 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00dd9580 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00dd9590 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00dd95a0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00dd95b0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00dd95c0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00dd95d0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00dd95e0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00dd95f0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00dd9600 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00dd9610 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00dd9620 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00dd9630 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00dd9640 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00dd9650 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00dd9660 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00dd9670 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00dd9680 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00dd9690 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00dd96a0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00dd96b0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00dd96c0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00dd96d0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00dd96e0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00dd96f0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00dd9700 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00dd9710 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ - 0x00dd9720 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ - 0x00dd9730 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ - 0x00dd9740 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ - 0x00dd9750 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ - 0x00dd9760 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ - 0x00dd9770 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ - 0x00dd9780 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00dd9790 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ - 0x00dd97a0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00dd97b0 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ - 0x00dd97c0 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ - 0x00dd97d0 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ - 0x00dd97e0 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ - 0x00dd97f0 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ - 0x00dd9800 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00dd9810 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00dd9820 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd9830 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd9840 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd9850 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd9860 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd9870 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd9880 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd9890 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd98a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd98b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd98c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd98d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd98e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd98f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd9900 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd9910 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd9920 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd9930 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd9940 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd9950 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd9960 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ - 0x00dd9970 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ - 0x00dd9980 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00dd9990 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00dd99a0 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ - 0x00dd99b0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00dd99c0 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ - 0x00dd99d0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dd99e0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00dd99f0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00dd9a00 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ - 0x00dd9a10 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ - 0x00dd9a20 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00dd9a30 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00dd9a40 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ - 0x00dd9a50 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ - 0x00dd9a60 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ - 0x00dd9a70 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ - 0x00dd9a80 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ - 0x00dd9a90 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ - 0x00dd9aa0 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ - 0x00dd9ab0 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ - 0x00dd9ac0 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ - 0x00dd9ad0 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ - 0x00dd9ae0 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ - 0x00dd9af0 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ - 0x00dd9b00 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ - 0x00dd9b10 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ - 0x00dd9b20 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ - 0x00dd9b30 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ - 0x00dd9b40 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ - 0x00dd9b50 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00dd9b60 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00dd9b70 765f4672 6167436f 6c6f7220 3d207665 v_FragColor = ve │ │ │ │ - 0x00dd9b80 63342875 5f636f6c 6f722e72 67622c20 c4(u_color.rgb, │ │ │ │ - 0x00dd9b90 755f636f 6c6f722e 61202a20 736d6f6f u_color.a * smoo │ │ │ │ - 0x00dd9ba0 74687374 65702830 2e372c20 312e302c thstep(0.7, 1.0, │ │ │ │ - 0x00dd9bb0 20765f69 6e74656e 73697479 29293b20 v_intensity)); │ │ │ │ - 0x00dd9bc0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00dd9bd0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dd9be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd9bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd9c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd9c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd9c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd9c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd9c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd9c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dd9c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dd9c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dd9c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dd9c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dd9ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dd9cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dd9cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dd9cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dd9ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dd9cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dd9d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dd9d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dd9d20 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ - 0x00dd9d30 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ - 0x00dd9d40 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00dd9d50 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00dd9d60 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ - 0x00dd9d70 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00dd9d80 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ - 0x00dd9d90 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dd9da0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00dd9db0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00dd9dc0 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ - 0x00dd9dd0 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ - 0x00dd9de0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00dd9df0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00dd9e00 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ - 0x00dd9e10 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ - 0x00dd9e20 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ - 0x00dd9e30 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ - 0x00dd9e40 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ - 0x00dd9e50 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ - 0x00dd9e60 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ - 0x00dd9e70 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ - 0x00dd9e80 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ - 0x00dd9e90 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ - 0x00dd9ea0 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ - 0x00dd9eb0 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ - 0x00dd9ec0 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ - 0x00dd9ed0 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ - 0x00dd9ee0 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ - 0x00dd9ef0 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ - 0x00dd9f00 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ - 0x00dd9f10 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00dd9f20 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00dd9f30 765f4672 6167436f 6c6f7220 3d207665 v_FragColor = ve │ │ │ │ - 0x00dd9f40 63342875 5f636f6c 6f722e72 67622c20 c4(u_color.rgb, │ │ │ │ - 0x00dd9f50 755f636f 6c6f722e 61202a20 765f696e u_color.a * v_in │ │ │ │ - 0x00dd9f60 74656e73 69747929 3b200a20 207d200a tensity); . } . │ │ │ │ - 0x00dd9f70 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dd9f80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dd9f90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dd9fa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dd9fb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dd9fc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dd9fd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dd9fe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dd9ff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dda000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dda010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dda020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dda030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dda040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dda050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dda060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dda070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dda080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dda090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dda0a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dda0b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dda0c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dda0d0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00dda0e0 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ - 0x00dda0f0 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ - 0x00dda100 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ - 0x00dda110 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ - 0x00dda120 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ - 0x00dda130 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ - 0x00dda140 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ - 0x00dda150 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ - 0x00dda160 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00dda170 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ - 0x00dda180 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ - 0x00dda190 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00dda1a0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00dda1b0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00dda1c0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00dda1d0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00dda1e0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00dda1f0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00dda200 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00dda210 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00dda220 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00dda230 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00dda240 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00dda250 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00dda260 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00dda270 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00dda280 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00dda290 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00dda2a0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00dda2b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dda2c0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00dda2d0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00dda2e0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00dda2f0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00dda300 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00dda310 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00dda320 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00dda330 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00dda340 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00dda350 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dda360 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00dda370 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00dda380 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dda390 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00dda3a0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00dda3b0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00dda3c0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00dda3d0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00dda3e0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00dda3f0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00dda400 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00dda410 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00dda420 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00dda430 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00dda440 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00dda450 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00dda460 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00dda470 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00dda480 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00dda490 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00dda4a0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00dda4b0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00dda4c0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00dda4d0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00dda4e0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00dda4f0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00dda500 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00dda510 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00dda520 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00dda530 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00dda540 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00dda550 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00dda560 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00dda570 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00dda580 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00dda590 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00dda5a0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00dda5b0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00dda5c0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00dda5d0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00dda5e0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00dda5f0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00dda600 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00dda610 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00dda620 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00dda630 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00dda640 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00dda650 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00dda660 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00dda670 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00dda680 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00dda690 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00dda6a0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00dda6b0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00dda6c0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00dda6d0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00dda6e0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00dda6f0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00dda700 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00dda710 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00dda720 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00dda730 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ - 0x00dda740 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ - 0x00dda750 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ - 0x00dda760 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ - 0x00dda770 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ - 0x00dda780 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00dda790 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ - 0x00dda7a0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00dda7b0 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00dda7c0 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00dda7d0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00dda7e0 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00dda7f0 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ - 0x00dda800 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ - 0x00dda810 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ - 0x00dda820 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dda830 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dda840 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dda850 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dda860 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dda870 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dda880 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dda890 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dda8a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dda8b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dda8c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dda8d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dda8e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dda8f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dda900 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dda910 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dda920 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dda930 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dda940 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dda950 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dda960 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dda970 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00dda980 696e2076 65633220 765f7465 78436f6f in vec2 v_texCoo │ │ │ │ - 0x00dda990 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00dda9a0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00dda9b0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00dda9c0 7472616e 73666f72 6d3b200a 2020756e transform; . un │ │ │ │ - 0x00dda9d0 69666f72 6d206d61 74342075 5f6e6f72 iform mat4 u_nor │ │ │ │ - 0x00dda9e0 6d616c54 72616e73 666f726d 3b200a20 malTransform; . │ │ │ │ - 0x00dda9f0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00ddaa00 636f6c6f 723b200a 2020756e 69666f72 color; . unifor │ │ │ │ - 0x00ddaa10 6d207665 63322075 5f746578 436f6f72 m vec2 u_texCoor │ │ │ │ - 0x00ddaa20 64466c69 7070696e 673b200a 2020756e dFlipping; . un │ │ │ │ - 0x00ddaa30 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00ddaa40 755f636f 6c6f7254 65783b20 0a202063 u_colorTex; . c │ │ │ │ - 0x00ddaa50 6f6e7374 20766563 33206c69 67687444 onst vec3 lightD │ │ │ │ - 0x00ddaa60 6972203d 20766563 3328302e 3331362c ir = vec3(0.316, │ │ │ │ - 0x00ddaa70 20302e30 2c20302e 39343829 3b200a20 0.0, 0.948); . │ │ │ │ - 0x00ddaa80 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00ddaa90 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00ddaaa0 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ - 0x00ddaab0 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ - 0x00ddaac0 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ - 0x00ddaad0 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ - 0x00ddaae0 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ - 0x00ddaaf0 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ - 0x00ddab00 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ - 0x00ddab10 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ - 0x00ddab20 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ - 0x00ddab30 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ - 0x00ddab40 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ - 0x00ddab50 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ - 0x00ddab60 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ - 0x00ddab70 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ - 0x00ddab80 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ - 0x00ddab90 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ - 0x00ddaba0 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ - 0x00ddabb0 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ - 0x00ddabc0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00ddabd0 7b200a20 20202066 6c6f6174 2070686f { . float pho │ │ │ │ - 0x00ddabe0 6e674469 66667573 65203d20 6d617828 ngDiffuse = max( │ │ │ │ - 0x00ddabf0 302e302c 202d646f 74286c69 67687444 0.0, -dot(lightD │ │ │ │ - 0x00ddac00 69722c20 765f6e6f 726d616c 29293b20 ir, v_normal)); │ │ │ │ - 0x00ddac10 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ - 0x00ddac20 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ - 0x00ddac30 72546578 2c20765f 74657843 6f6f7264 rTex, v_texCoord │ │ │ │ - 0x00ddac40 7329202a 20755f63 6f6c6f72 3b200a20 s) * u_color; . │ │ │ │ - 0x00ddac50 20202076 5f467261 67436f6c 6f72203d v_FragColor = │ │ │ │ - 0x00ddac60 20766563 34282870 686f6e67 44696666 vec4((phongDiff │ │ │ │ - 0x00ddac70 75736520 2a20302e 35202b20 302e3529 use * 0.5 + 0.5) │ │ │ │ - 0x00ddac80 202a2063 6f6c6f72 2e726762 2c20636f * color.rgb, co │ │ │ │ - 0x00ddac90 6c6f722e 61293b20 0a20207d 200a0000 lor.a); . } ... │ │ │ │ - 0x00ddaca0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddacb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddacc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddacd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddace0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddacf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddad00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddad10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddad20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddad30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddad40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddad50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddad60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddad70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddad80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddad90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddada0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddadb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddadc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddadd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddade0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddadf0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00ddae00 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00ddae10 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00ddae20 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ - 0x00ddae30 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00ddae40 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ - 0x00ddae50 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00ddae60 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ - 0x00ddae70 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ - 0x00ddae80 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ - 0x00ddae90 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00ddaea0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00ddaeb0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ - 0x00ddaec0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ - 0x00ddaed0 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ - 0x00ddaee0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00ddaef0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00ddaf00 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00ddaf10 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00ddaf20 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00ddaf30 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00ddaf40 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00ddaf50 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00ddaf60 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00ddaf70 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00ddaf80 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00ddaf90 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00ddafa0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00ddafb0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00ddafc0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00ddafd0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00ddafe0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00ddaff0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00ddb000 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00ddb010 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00ddb020 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00ddb030 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00ddb040 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00ddb050 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00ddb060 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00ddb070 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00ddb080 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00ddb090 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00ddb0a0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00ddb0b0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00ddb0c0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00ddb0d0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00ddb0e0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00ddb0f0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00ddb100 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00ddb110 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00ddb120 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00ddb130 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00ddb140 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00ddb150 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00ddb160 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00ddb170 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00ddb180 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00ddb190 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00ddb1a0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00ddb1b0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00ddb1c0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00ddb1d0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00ddb1e0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00ddb1f0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00ddb200 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00ddb210 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00ddb220 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00ddb230 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00ddb240 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00ddb250 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00ddb260 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00ddb270 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00ddb280 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00ddb290 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00ddb2a0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00ddb2b0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00ddb2c0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00ddb2d0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00ddb2e0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00ddb2f0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00ddb300 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00ddb310 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00ddb320 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00ddb330 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00ddb340 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00ddb350 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00ddb360 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00ddb370 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00ddb380 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00ddb390 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00ddb3a0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00ddb3b0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00ddb3c0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00ddb3d0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00ddb3e0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00ddb3f0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00ddb400 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00ddb410 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00ddb420 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00ddb430 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00ddb440 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00ddb450 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00ddb460 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00ddb470 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00ddb480 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ - 0x00ddb490 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ - 0x00ddb4a0 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ - 0x00ddb4b0 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ - 0x00ddb4c0 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ - 0x00ddb4d0 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ - 0x00ddb4e0 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ - 0x00ddb4f0 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ - 0x00ddb500 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ - 0x00ddb510 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ - 0x00ddb520 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ - 0x00ddb530 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ - 0x00ddb540 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ - 0x00ddb550 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ - 0x00ddb560 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ - 0x00ddb570 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ - 0x00ddb580 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ - 0x00ddb590 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ - 0x00ddb5a0 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ - 0x00ddb5b0 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ - 0x00ddb5c0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ - 0x00ddb5d0 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ - 0x00ddb5e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddb5f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddb600 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddb610 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddb620 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddb630 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddb640 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddb650 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddb660 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddb670 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddb680 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddb690 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddb6a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddb6b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddb6c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddb6d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddb6e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddb6f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddb700 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddb710 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddb720 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00ddb730 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00ddb740 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00ddb750 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00ddb760 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00ddb770 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00ddb780 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00ddb790 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00ddb7a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddb7b0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00ddb7c0 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00ddb7d0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00ddb7e0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00ddb7f0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00ddb800 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00ddb810 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00ddb820 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00ddb830 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00ddb840 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00ddb850 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00ddb860 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00ddb870 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00ddb880 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00ddb890 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00ddb8a0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00ddb8b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00ddb8c0 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00ddb8d0 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ - 0x00ddb8e0 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ - 0x00ddb8f0 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ - 0x00ddb900 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00ddb910 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00ddb920 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ - 0x00ddb930 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ - 0x00ddb940 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ - 0x00ddb950 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ - 0x00ddb960 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ - 0x00ddb970 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ - 0x00ddb980 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ - 0x00ddb990 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ - 0x00ddb9a0 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ - 0x00ddb9b0 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ - 0x00ddb9c0 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ - 0x00ddb9d0 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ - 0x00ddb9e0 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ - 0x00ddb9f0 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ - 0x00ddba00 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ - 0x00ddba10 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ - 0x00ddba20 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ - 0x00ddba30 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00ddba40 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ - 0x00ddba50 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00ddba60 204c4f57 5f502076 65633420 66696e61 LOW_P vec4 fina │ │ │ │ - 0x00ddba70 6c436f6c 6f72203d 20765f63 6f6c6f72 lColor = v_color │ │ │ │ - 0x00ddba80 3b200a20 2023656c 7365200a 20202020 ; . #else . │ │ │ │ - 0x00ddba90 4c4f575f 50207665 63342066 696e616c LOW_P vec4 final │ │ │ │ - 0x00ddbaa0 436f6c6f 72203d20 74657874 75726528 Color = texture( │ │ │ │ - 0x00ddbab0 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ - 0x00ddbac0 6c6f7254 6578436f 6f726473 293b200a lorTexCoords); . │ │ │ │ - 0x00ddbad0 20202365 6e646966 200a2020 2020666c #endif . fl │ │ │ │ - 0x00ddbae0 6f617420 736d616c 6c526164 69757320 oat smallRadius │ │ │ │ - 0x00ddbaf0 3d20765f 72616469 75732e7a 202d2061 = v_radius.z - a │ │ │ │ - 0x00ddbb00 61506978 656c7343 6f756e74 3b200a20 aPixelsCount; . │ │ │ │ - 0x00ddbb10 20202066 6c6f6174 20737465 7056616c float stepVal │ │ │ │ - 0x00ddbb20 7565203d 20736d6f 6f746873 74657028 ue = smoothstep( │ │ │ │ - 0x00ddbb30 736d616c 6c526164 69757320 2a20736d smallRadius * sm │ │ │ │ - 0x00ddbb40 616c6c52 61646975 732c2076 5f726164 allRadius, v_rad │ │ │ │ - 0x00ddbb50 6975732e 7a202a20 765f7261 64697573 ius.z * v_radius │ │ │ │ - 0x00ddbb60 2e7a2c20 0a202020 20202020 20202020 .z, . │ │ │ │ + 0x00dd5390 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00dd53a0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00dd53b0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00dd53c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00dd53d0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00dd53e0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00dd53f0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00dd5400 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00dd5410 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00dd5420 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ + 0x00dd5430 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ + 0x00dd5440 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ + 0x00dd5450 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ + 0x00dd5460 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ + 0x00dd5470 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ + 0x00dd5480 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ + 0x00dd5490 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ + 0x00dd54a0 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ + 0x00dd54b0 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ + 0x00dd54c0 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ + 0x00dd54d0 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ + 0x00dd54e0 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ + 0x00dd54f0 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ + 0x00dd5500 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ + 0x00dd5510 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ + 0x00dd5520 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ + 0x00dd5530 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ + 0x00dd5540 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00dd5550 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00dd5560 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00dd5570 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00dd5580 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ + 0x00dd5590 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ + 0x00dd55a0 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ + 0x00dd55b0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00dd55c0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00dd55d0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00dd55e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd55f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd5600 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd5610 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd5620 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd5630 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd5640 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd5650 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd5660 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd5670 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd5680 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd5690 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd56a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd56b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd56c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd56d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd56e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd56f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd5700 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd5710 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd5720 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd5730 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00dd5740 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00dd5750 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00dd5760 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00dd5770 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00dd5780 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00dd5790 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00dd57a0 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00dd57b0 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00dd57c0 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00dd57d0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00dd57e0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00dd57f0 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00dd5800 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00dd5810 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00dd5820 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00dd5830 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00dd5840 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00dd5850 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00dd5860 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00dd5870 203d2031 3030302e 303b200a 20204c4f = 1000.0; . LO │ │ │ │ + 0x00dd5880 575f5020 76656333 204d6f64 756c6174 W_P vec3 Modulat │ │ │ │ + 0x00dd5890 65427950 61747465 726e446f 7473284c eByPatternDots(L │ │ │ │ + 0x00dd58a0 4f575f50 20766563 3320636f 6c6f722c OW_P vec3 color, │ │ │ │ + 0x00dd58b0 20666c6f 61742064 61726b65 6e2c2066 float darken, f │ │ │ │ + 0x00dd58c0 6c6f6174 20636f76 65726167 6529200a loat coverage) . │ │ │ │ + 0x00dd58d0 20207b20 0a202020 20636f6e 73742066 { . const f │ │ │ │ + 0x00dd58e0 6c6f6174 206b4c69 67687465 6e203d20 loat kLighten = │ │ │ │ + 0x00dd58f0 302e3037 353b200a 20202020 69662028 0.075; . if ( │ │ │ │ + 0x00dd5900 646f7428 636f6c6f 722c2076 65633328 dot(color, vec3( │ │ │ │ + 0x00dd5910 302e3231 32362c20 302e3731 35322c20 0.2126, 0.7152, │ │ │ │ + 0x00dd5920 302e3037 32322929 203c2030 2e352920 0.0722)) < 0.5) │ │ │ │ + 0x00dd5930 0a202020 20202072 65747572 6e20636f . return co │ │ │ │ + 0x00dd5940 6c6f7220 2b20636f 76657261 6765202a lor + coverage * │ │ │ │ + 0x00dd5950 206b4c69 67687465 6e3b200a 20202020 kLighten; . │ │ │ │ + 0x00dd5960 72657475 726e2063 6f6c6f72 202a206d return color * m │ │ │ │ + 0x00dd5970 69782831 2e302c20 6461726b 656e2c20 ix(1.0, darken, │ │ │ │ + 0x00dd5980 636f7665 72616765 293b200a 20207d20 coverage); . } │ │ │ │ + 0x00dd5990 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00dd59a0 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ + 0x00dd59b0 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ + 0x00dd59c0 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00dd59d0 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ + 0x00dd59e0 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ + 0x00dd59f0 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ + 0x00dd5a00 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00dd5a10 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ + 0x00dd5a20 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00dd5a30 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd5a40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd5a50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd5a60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd5a70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd5a80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd5a90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd5aa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd5ab0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd5ac0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd5ad0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd5ae0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd5af0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd5b00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd5b10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd5b20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd5b30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd5b40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd5b50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd5b60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd5b70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd5b80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd5b90 63342076 5f6f6666 73657473 3b200a20 c4 v_offsets; . │ │ │ │ + 0x00dd5ba0 20696e20 76656334 20765f63 6f6c6f72 in vec4 v_color │ │ │ │ + 0x00dd5bb0 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00dd5bc0 46726167 436f6c6f 723b200a 2020636f FragColor; . co │ │ │ │ + 0x00dd5bd0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00dd5be0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00dd5bf0 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ + 0x00dd5c00 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ + 0x00dd5c10 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ + 0x00dd5c20 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ + 0x00dd5c30 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ + 0x00dd5c40 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ + 0x00dd5c50 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ + 0x00dd5c60 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ + 0x00dd5c70 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ + 0x00dd5c80 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ + 0x00dd5c90 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ + 0x00dd5ca0 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ + 0x00dd5cb0 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ + 0x00dd5cc0 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ + 0x00dd5cd0 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ + 0x00dd5ce0 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ + 0x00dd5cf0 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ + 0x00dd5d00 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ + 0x00dd5d10 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00dd5d20 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00dd5d30 6c6f7220 3d20765f 636f6c6f 723b200a lor = v_color; . │ │ │ │ + 0x00dd5d40 20202020 76656332 20726164 6975733b vec2 radius; │ │ │ │ + 0x00dd5d50 200a2020 20207261 64697573 2e78203d . radius.x = │ │ │ │ + 0x00dd5d60 206d6178 28302e30 2c206162 7328765f max(0.0, abs(v_ │ │ │ │ + 0x00dd5d70 6f666673 6574732e 7829202d 20765f6f offsets.x) - v_o │ │ │ │ + 0x00dd5d80 66667365 74732e7a 293b200a 20202020 ffsets.z); . │ │ │ │ + 0x00dd5d90 72616469 75732e79 203d206d 61782830 radius.y = max(0 │ │ │ │ + 0x00dd5da0 2e302c20 61627328 765f6f66 66736574 .0, abs(v_offset │ │ │ │ + 0x00dd5db0 732e7929 202d2076 5f6f6666 73657473 s.y) - v_offsets │ │ │ │ + 0x00dd5dc0 2e77293b 200a2020 2020666c 6f617420 .w); . float │ │ │ │ + 0x00dd5dd0 6d617852 61646975 73203d20 312e303b maxRadius = 1.0; │ │ │ │ + 0x00dd5de0 200a2020 2020666c 6f617420 61615261 . float aaRa │ │ │ │ + 0x00dd5df0 64697573 203d2030 2e393b20 0a202020 dius = 0.9; . │ │ │ │ + 0x00dd5e00 20666c6f 61742073 74657056 616c7565 float stepValue │ │ │ │ + 0x00dd5e10 203d2073 6d6f6f74 68737465 70286161 = smoothstep(aa │ │ │ │ + 0x00dd5e20 52616469 7573202a 20616152 61646975 Radius * aaRadiu │ │ │ │ + 0x00dd5e30 732c206d 61785261 64697573 202a206d s, maxRadius * m │ │ │ │ + 0x00dd5e40 61785261 64697573 2c20646f 74287261 axRadius, dot(ra │ │ │ │ + 0x00dd5e50 64697573 2e78792c 20726164 6975732e dius.xy, radius. │ │ │ │ + 0x00dd5e60 78792929 3b200a20 20202066 696e616c xy)); . final │ │ │ │ + 0x00dd5e70 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ + 0x00dd5e80 6f6c6f72 2e61202a 2028312e 30202d20 olor.a * (1.0 - │ │ │ │ + 0x00dd5e90 73746570 56616c75 65293b20 0a202020 stepValue); . │ │ │ │ + 0x00dd5ea0 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ + 0x00dd5eb0 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ + 0x00dd5ec0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd5ed0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd5ee0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd5ef0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd5f00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd5f10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd5f20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd5f30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd5f40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd5f50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd5f60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd5f70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd5f80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd5f90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd5fa0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd5fb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd5fc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd5fd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd5fe0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd5ff0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd6000 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd6010 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd6020 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd6030 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00dd6040 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00dd6050 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00dd6060 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00dd6070 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00dd6080 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00dd6090 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00dd60a0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00dd60b0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00dd60c0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00dd60d0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00dd60e0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00dd60f0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00dd6100 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00dd6110 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00dd6120 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00dd6130 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00dd6140 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00dd6150 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00dd6160 733b200a 2020636f 6e737420 666c6f61 s; . const floa │ │ │ │ + 0x00dd6170 74206b41 6e746961 6c696173 696e6753 t kAntialiasingS │ │ │ │ + 0x00dd6180 63616c61 72203d20 302e393b 200a2020 calar = 0.9; . │ │ │ │ + 0x00dd6190 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00dd61a0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00dd61b0 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ + 0x00dd61c0 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ + 0x00dd61d0 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ + 0x00dd61e0 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ + 0x00dd61f0 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ + 0x00dd6200 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ + 0x00dd6210 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ + 0x00dd6220 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ + 0x00dd6230 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ + 0x00dd6240 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ + 0x00dd6250 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ + 0x00dd6260 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ + 0x00dd6270 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00dd6280 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ + 0x00dd6290 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ + 0x00dd62a0 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ + 0x00dd62b0 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ + 0x00dd62c0 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ + 0x00dd62d0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00dd62e0 200a2020 2020666c 6f617420 64203d20 . float d = │ │ │ │ + 0x00dd62f0 646f7428 765f7261 64697573 2e78792c dot(v_radius.xy, │ │ │ │ + 0x00dd6300 20765f72 61646975 732e7879 293b200a v_radius.xy); . │ │ │ │ + 0x00dd6310 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00dd6320 6c6f7220 3d20765f 636f6c6f 723b200a lor = v_color; . │ │ │ │ + 0x00dd6330 20202020 666c6f61 74206161 52616469 float aaRadi │ │ │ │ + 0x00dd6340 7573203d 20765f72 61646975 732e7a20 us = v_radius.z │ │ │ │ + 0x00dd6350 2a206b41 6e746961 6c696173 696e6753 * kAntialiasingS │ │ │ │ + 0x00dd6360 63616c61 723b200a 20202020 666c6f61 calar; . floa │ │ │ │ + 0x00dd6370 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ + 0x00dd6380 6f6f7468 73746570 28616152 61646975 oothstep(aaRadiu │ │ │ │ + 0x00dd6390 73202a20 61615261 64697573 2c20765f s * aaRadius, v_ │ │ │ │ + 0x00dd63a0 72616469 75732e7a 202a2076 5f726164 radius.z * v_rad │ │ │ │ + 0x00dd63b0 6975732e 7a2c2064 293b200a 20202020 ius.z, d); . │ │ │ │ + 0x00dd63c0 66696e61 6c436f6c 6f722e61 203d2066 finalColor.a = f │ │ │ │ + 0x00dd63d0 696e616c 436f6c6f 722e6120 2a20755f inalColor.a * u_ │ │ │ │ + 0x00dd63e0 6f706163 69747920 2a202831 2e30202d opacity * (1.0 - │ │ │ │ + 0x00dd63f0 20737465 7056616c 7565293b 200a2020 stepValue); . │ │ │ │ + 0x00dd6400 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00dd6410 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00dd6420 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00dd6430 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd6440 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd6450 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd6460 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd6470 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd6480 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd6490 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd64a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd64b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd64c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd64d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd64e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd64f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd6500 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd6510 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd6520 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd6530 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd6540 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd6550 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd6560 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd6570 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd6580 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd6590 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00dd65a0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00dd65b0 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ + 0x00dd65c0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00dd65d0 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ + 0x00dd65e0 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ + 0x00dd65f0 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ + 0x00dd6600 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ + 0x00dd6610 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ + 0x00dd6620 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ + 0x00dd6630 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ + 0x00dd6640 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ + 0x00dd6650 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ + 0x00dd6660 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ + 0x00dd6670 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ + 0x00dd6680 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00dd6690 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ + 0x00dd66a0 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ + 0x00dd66b0 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ + 0x00dd66c0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dd66d0 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ + 0x00dd66e0 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00dd66f0 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ + 0x00dd6700 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ + 0x00dd6710 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ + 0x00dd6720 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00dd6730 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00dd6740 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00dd6750 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00dd6760 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00dd6770 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00dd6780 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00dd6790 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00dd67a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dd67b0 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00dd67c0 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00dd67d0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00dd67e0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00dd67f0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00dd6800 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00dd6810 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dd6820 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00dd6830 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00dd6840 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dd6850 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00dd6860 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00dd6870 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00dd6880 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dd6890 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00dd68a0 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00dd68b0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00dd68c0 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00dd68d0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00dd68e0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00dd68f0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00dd6900 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00dd6910 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00dd6920 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00dd6930 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00dd6940 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00dd6950 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00dd6960 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00dd6970 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00dd6980 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00dd6990 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00dd69a0 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00dd69b0 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00dd69c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dd69d0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00dd69e0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00dd69f0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00dd6a00 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00dd6a10 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00dd6a20 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00dd6a30 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00dd6a40 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00dd6a50 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00dd6a60 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00dd6a70 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00dd6a80 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00dd6a90 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00dd6aa0 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00dd6ab0 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00dd6ac0 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00dd6ad0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00dd6ae0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00dd6af0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00dd6b00 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00dd6b10 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00dd6b20 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00dd6b30 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00dd6b40 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00dd6b50 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00dd6b60 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00dd6b70 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00dd6b80 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00dd6b90 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00dd6ba0 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00dd6bb0 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00dd6bc0 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00dd6bd0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00dd6be0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00dd6bf0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00dd6c00 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00dd6c10 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00dd6c20 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00dd6c30 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00dd6c40 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00dd6c50 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00dd6c60 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00dd6c70 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00dd6c80 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00dd6c90 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00dd6ca0 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00dd6cb0 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ + 0x00dd6cc0 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ + 0x00dd6cd0 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ + 0x00dd6ce0 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ + 0x00dd6cf0 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ + 0x00dd6d00 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ + 0x00dd6d10 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00dd6d20 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ + 0x00dd6d30 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ + 0x00dd6d40 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ + 0x00dd6d50 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00dd6d60 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ + 0x00dd6d70 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00dd6d80 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ + 0x00dd6d90 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ + 0x00dd6da0 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ + 0x00dd6db0 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00dd6dc0 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ + 0x00dd6dd0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00dd6de0 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ + 0x00dd6df0 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ + 0x00dd6e00 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ + 0x00dd6e10 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ + 0x00dd6e20 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ + 0x00dd6e30 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ + 0x00dd6e40 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00dd6e50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd6e60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd6e70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd6e80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd6e90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd6ea0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd6eb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd6ec0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd6ed0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd6ee0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd6ef0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd6f00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd6f10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd6f20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd6f30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd6f40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd6f50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd6f60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd6f70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd6f80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd6f90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd6fa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd6fb0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00dd6fc0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00dd6fd0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00dd6fe0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00dd6ff0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00dd7000 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00dd7010 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00dd7020 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00dd7030 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00dd7040 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00dd7050 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00dd7060 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00dd7070 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00dd7080 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00dd7090 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dd70a0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00dd70b0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00dd70c0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00dd70d0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00dd70e0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00dd70f0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00dd7100 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00dd7110 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00dd7120 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00dd7130 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00dd7140 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00dd7150 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00dd7160 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00dd7170 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00dd7180 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00dd7190 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dd71a0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00dd71b0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00dd71c0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00dd71d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dd71e0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00dd71f0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00dd7200 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00dd7210 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00dd7220 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00dd7230 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dd7240 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00dd7250 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00dd7260 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00dd7270 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00dd7280 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00dd7290 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00dd72a0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dd72b0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00dd72c0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00dd72d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dd72e0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00dd72f0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00dd7300 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dd7310 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00dd7320 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00dd7330 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00dd7340 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00dd7350 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00dd7360 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00dd7370 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00dd7380 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00dd7390 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00dd73a0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00dd73b0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00dd73c0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00dd73d0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00dd73e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00dd73f0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00dd7400 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00dd7410 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00dd7420 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00dd7430 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00dd7440 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00dd7450 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00dd7460 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00dd7470 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00dd7480 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00dd7490 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00dd74a0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00dd74b0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00dd74c0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00dd74d0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00dd74e0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00dd74f0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00dd7500 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00dd7510 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00dd7520 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00dd7530 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00dd7540 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00dd7550 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00dd7560 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00dd7570 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00dd7580 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00dd7590 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00dd75a0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00dd75b0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00dd75c0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00dd75d0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00dd75e0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00dd75f0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00dd7600 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00dd7610 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00dd7620 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00dd7630 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00dd7640 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00dd7650 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00dd7660 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00dd7670 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00dd7680 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00dd7690 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00dd76a0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00dd76b0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00dd76c0 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00dd76d0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00dd76e0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00dd76f0 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ + 0x00dd7700 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ + 0x00dd7710 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00dd7720 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00dd7730 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ + 0x00dd7740 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ + 0x00dd7750 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00dd7760 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ + 0x00dd7770 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00dd7780 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00dd7790 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00dd77a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd77b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd77c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd77d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd77e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd77f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd7800 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd7810 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd7820 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd7830 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd7840 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd7850 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd7860 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd7870 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd7880 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd7890 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd78a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd78b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd78c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd78d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd78e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd78f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00dd7900 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00dd7910 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00dd7920 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00dd7930 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00dd7940 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00dd7950 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00dd7960 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00dd7970 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00dd7980 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00dd7990 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00dd79a0 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00dd79b0 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00dd79c0 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00dd79d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00dd79e0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00dd79f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dd7a00 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00dd7a10 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00dd7a20 75743b20 0a202075 6e69666f 726d2073 ut; . uniform s │ │ │ │ + 0x00dd7a30 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00dd7a40 5465783b 200a2020 636f6e73 7420666c Tex; . const fl │ │ │ │ + 0x00dd7a50 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00dd7a60 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00dd7a70 0a20204c 4f575f50 20766563 33204d6f . LOW_P vec3 Mo │ │ │ │ + 0x00dd7a80 64756c61 74654279 50617474 65726e44 dulateByPatternD │ │ │ │ + 0x00dd7a90 6f747328 4c4f575f 50207665 63332063 ots(LOW_P vec3 c │ │ │ │ + 0x00dd7aa0 6f6c6f72 2c20666c 6f617420 6461726b olor, float dark │ │ │ │ + 0x00dd7ab0 656e2c20 666c6f61 7420636f 76657261 en, float covera │ │ │ │ + 0x00dd7ac0 67652920 0a20207b 200a2020 2020636f ge) . { . co │ │ │ │ + 0x00dd7ad0 6e737420 666c6f61 74206b4c 69676874 nst float kLight │ │ │ │ + 0x00dd7ae0 656e203d 20302e30 37353b20 0a202020 en = 0.075; . │ │ │ │ + 0x00dd7af0 20696620 28646f74 28636f6c 6f722c20 if (dot(color, │ │ │ │ + 0x00dd7b00 76656333 28302e32 3132362c 20302e37 vec3(0.2126, 0.7 │ │ │ │ + 0x00dd7b10 3135322c 20302e30 37323229 29203c20 152, 0.0722)) < │ │ │ │ + 0x00dd7b20 302e3529 200a2020 20202020 72657475 0.5) . retu │ │ │ │ + 0x00dd7b30 726e2063 6f6c6f72 202b2063 6f766572 rn color + cover │ │ │ │ + 0x00dd7b40 61676520 2a206b4c 69676874 656e3b20 age * kLighten; │ │ │ │ + 0x00dd7b50 0a202020 20726574 75726e20 636f6c6f . return colo │ │ │ │ + 0x00dd7b60 72202a20 6d697828 312e302c 20646172 r * mix(1.0, dar │ │ │ │ + 0x00dd7b70 6b656e2c 20636f76 65726167 65293b20 ken, coverage); │ │ │ │ + 0x00dd7b80 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00dd7b90 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00dd7ba0 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ + 0x00dd7bb0 74657874 75726528 755f636f 6c6f7254 texture(u_colorT │ │ │ │ + 0x00dd7bc0 65782c20 765f636f 6c6f7254 6578436f ex, v_colorTexCo │ │ │ │ + 0x00dd7bd0 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ + 0x00dd7be0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ + 0x00dd7bf0 61636974 793b200a 20202020 765f4672 acity; . v_Fr │ │ │ │ + 0x00dd7c00 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00dd7c10 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00dd7c20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd7c30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd7c40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd7c50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd7c60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd7c70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd7c80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd7c90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd7ca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd7cb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd7cc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd7cd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd7ce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd7cf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd7d00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd7d10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd7d20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd7d30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd7d40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd7d50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd7d60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd7d70 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00dd7d80 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00dd7d90 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00dd7da0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00dd7db0 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00dd7dc0 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ + 0x00dd7dd0 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00dd7de0 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ + 0x00dd7df0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00dd7e00 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00dd7e10 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00dd7e20 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00dd7e30 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00dd7e40 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00dd7e50 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00dd7e60 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00dd7e70 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00dd7e80 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00dd7e90 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00dd7ea0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00dd7eb0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00dd7ec0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00dd7ed0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00dd7ee0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00dd7ef0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00dd7f00 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00dd7f10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dd7f20 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00dd7f30 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00dd7f40 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00dd7f50 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00dd7f60 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00dd7f70 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00dd7f80 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00dd7f90 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00dd7fa0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00dd7fb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dd7fc0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00dd7fd0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00dd7fe0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dd7ff0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00dd8000 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00dd8010 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00dd8020 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00dd8030 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00dd8040 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00dd8050 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00dd8060 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00dd8070 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00dd8080 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00dd8090 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00dd80a0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00dd80b0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00dd80c0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00dd80d0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00dd80e0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00dd80f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00dd8100 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00dd8110 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00dd8120 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00dd8130 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00dd8140 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00dd8150 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00dd8160 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00dd8170 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00dd8180 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00dd8190 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00dd81a0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00dd81b0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00dd81c0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00dd81d0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00dd81e0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00dd81f0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00dd8200 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00dd8210 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00dd8220 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00dd8230 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00dd8240 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00dd8250 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00dd8260 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00dd8270 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00dd8280 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00dd8290 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00dd82a0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00dd82b0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00dd82c0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00dd82d0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00dd82e0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00dd82f0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00dd8300 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00dd8310 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00dd8320 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00dd8330 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00dd8340 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00dd8350 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00dd8360 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00dd8370 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00dd8380 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ + 0x00dd8390 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00dd83a0 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ + 0x00dd83b0 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ + 0x00dd83c0 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00dd83d0 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ + 0x00dd83e0 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ + 0x00dd83f0 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ + 0x00dd8400 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00dd8410 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ + 0x00dd8420 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ + 0x00dd8430 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd8440 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd8450 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd8460 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd8470 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd8480 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd8490 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd84a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd84b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd84c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd84d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd84e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd84f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd8500 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd8510 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd8520 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd8530 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd8540 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd8550 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd8560 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd8570 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd8580 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00dd8590 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00dd85a0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00dd85b0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00dd85c0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00dd85d0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00dd85e0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00dd85f0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00dd8600 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd8610 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00dd8620 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00dd8630 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00dd8640 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00dd8650 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00dd8660 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00dd8670 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00dd8680 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00dd8690 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00dd86a0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00dd86b0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00dd86c0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00dd86d0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00dd86e0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00dd86f0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00dd8700 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00dd8710 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dd8720 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00dd8730 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00dd8740 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00dd8750 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00dd8760 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00dd8770 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00dd8780 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ + 0x00dd8790 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ + 0x00dd87a0 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ + 0x00dd87b0 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ + 0x00dd87c0 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ + 0x00dd87d0 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ + 0x00dd87e0 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ + 0x00dd87f0 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ + 0x00dd8800 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ + 0x00dd8810 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ + 0x00dd8820 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ + 0x00dd8830 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ + 0x00dd8840 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ + 0x00dd8850 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ + 0x00dd8860 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ + 0x00dd8870 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ + 0x00dd8880 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ + 0x00dd8890 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00dd88a0 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ + 0x00dd88b0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00dd88c0 204c4f57 5f502076 65633420 66696e61 LOW_P vec4 fina │ │ │ │ + 0x00dd88d0 6c436f6c 6f72203d 20765f63 6f6c6f72 lColor = v_color │ │ │ │ + 0x00dd88e0 3b200a20 2023656c 7365200a 20202020 ; . #else . │ │ │ │ + 0x00dd88f0 4c4f575f 50207665 63342066 696e616c LOW_P vec4 final │ │ │ │ + 0x00dd8900 436f6c6f 72203d20 74657874 75726528 Color = texture( │ │ │ │ + 0x00dd8910 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ + 0x00dd8920 6c6f7254 6578436f 6f726473 293b200a lorTexCoords); . │ │ │ │ + 0x00dd8930 20202365 6e646966 200a2020 2020666c #endif . fl │ │ │ │ + 0x00dd8940 6f617420 736d616c 6c526164 69757320 oat smallRadius │ │ │ │ + 0x00dd8950 3d20765f 72616469 75732e7a 202d2061 = v_radius.z - a │ │ │ │ + 0x00dd8960 61506978 656c7343 6f756e74 3b200a20 aPixelsCount; . │ │ │ │ + 0x00dd8970 20202066 6c6f6174 20737465 7056616c float stepVal │ │ │ │ + 0x00dd8980 7565203d 20736d6f 6f746873 74657028 ue = smoothstep( │ │ │ │ + 0x00dd8990 736d616c 6c526164 69757320 2a20736d smallRadius * sm │ │ │ │ + 0x00dd89a0 616c6c52 61646975 732c2076 5f726164 allRadius, v_rad │ │ │ │ + 0x00dd89b0 6975732e 7a202a20 765f7261 64697573 ius.z * v_radius │ │ │ │ + 0x00dd89c0 2e7a2c20 0a202020 20202020 20202020 .z, . │ │ │ │ + 0x00dd89d0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dd89e0 20202020 2020765f 72616469 75732e78 v_radius.x │ │ │ │ + 0x00dd89f0 202a2076 5f726164 6975732e 78202b20 * v_radius.x + │ │ │ │ + 0x00dd8a00 765f7261 64697573 2e79202a 20765f72 v_radius.y * v_r │ │ │ │ + 0x00dd8a10 61646975 732e7929 3b200a20 20202066 adius.y); . f │ │ │ │ + 0x00dd8a20 696e616c 436f6c6f 722e6120 3d206669 inalColor.a = fi │ │ │ │ + 0x00dd8a30 6e616c43 6f6c6f72 2e61202a 20755f6f nalColor.a * u_o │ │ │ │ + 0x00dd8a40 70616369 7479202a 2028312e 30202d20 pacity * (1.0 - │ │ │ │ + 0x00dd8a50 73746570 56616c75 65293b20 0a202020 stepValue); . │ │ │ │ + 0x00dd8a60 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ + 0x00dd8a70 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ + 0x00dd8a80 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd8a90 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd8aa0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd8ab0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd8ac0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd8ad0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd8ae0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd8af0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd8b00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd8b10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd8b20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd8b30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd8b40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd8b50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd8b60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd8b70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd8b80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd8b90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd8ba0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd8bb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd8bc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd8bd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd8be0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd8bf0 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00dd8c00 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00dd8c10 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00dd8c20 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00dd8c30 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00dd8c40 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00dd8c50 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00dd8c60 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00dd8c70 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00dd8c80 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00dd8c90 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00dd8ca0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00dd8cb0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00dd8cc0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00dd8cd0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00dd8ce0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00dd8cf0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00dd8d00 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00dd8d10 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00dd8d20 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00dd8d30 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00dd8d40 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00dd8d50 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00dd8d60 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00dd8d70 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00dd8d80 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00dd8d90 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00dd8da0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00dd8db0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00dd8dc0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00dd8dd0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00dd8de0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00dd8df0 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00dd8e00 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ + 0x00dd8e10 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ + 0x00dd8e20 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ + 0x00dd8e30 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ + 0x00dd8e40 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ + 0x00dd8e50 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ + 0x00dd8e60 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00dd8e70 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00dd8e80 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ + 0x00dd8e90 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ + 0x00dd8ea0 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ + 0x00dd8eb0 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ + 0x00dd8ec0 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ + 0x00dd8ed0 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ + 0x00dd8ee0 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ + 0x00dd8ef0 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ + 0x00dd8f00 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ + 0x00dd8f10 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ + 0x00dd8f20 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ + 0x00dd8f30 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ + 0x00dd8f40 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ + 0x00dd8f50 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ + 0x00dd8f60 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ + 0x00dd8f70 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ + 0x00dd8f80 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ + 0x00dd8f90 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00dd8fa0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00dd8fb0 69662028 765f6c65 6e677468 2e78203c if (v_length.x < │ │ │ │ + 0x00dd8fc0 20765f6c 656e6774 682e7a29 200a2020 v_length.z) . │ │ │ │ + 0x00dd8fd0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00dd8fe0 20207665 63322063 6f656673 203d2073 vec2 coefs = s │ │ │ │ + 0x00dd8ff0 74657028 765f6c65 6e677468 2e78782c tep(v_length.xx, │ │ │ │ + 0x00dd9000 20755f66 616b6542 6f726465 7273293b u_fakeBorders); │ │ │ │ + 0x00dd9010 200a2020 2020636f 6566732e 79203d20 . coefs.y = │ │ │ │ + 0x00dd9020 312e3020 2d20636f 6566732e 793b200a 1.0 - coefs.y; . │ │ │ │ + 0x00dd9030 20202020 76656334 206d6169 6e436f6c vec4 mainCol │ │ │ │ + 0x00dd9040 6f72203d 206d6978 28755f63 6f6c6f72 or = mix(u_color │ │ │ │ + 0x00dd9050 2c20755f 66616b65 436f6c6f 722c2063 , u_fakeColor, c │ │ │ │ + 0x00dd9060 6f656673 2e78293b 200a2020 20206d61 oefs.x); . ma │ │ │ │ + 0x00dd9070 696e436f 6c6f7220 3d206d69 78286d61 inColor = mix(ma │ │ │ │ + 0x00dd9080 696e436f 6c6f722c 20755f66 616b6543 inColor, u_fakeC │ │ │ │ + 0x00dd9090 6f6c6f72 2c20636f 6566732e 79293b20 olor, coefs.y); │ │ │ │ + 0x00dd90a0 0a202020 20766563 34206d61 696e4f75 . vec4 mainOu │ │ │ │ + 0x00dd90b0 746c696e 65436f6c 6f72203d 206d6978 tlineColor = mix │ │ │ │ + 0x00dd90c0 28755f6f 75746c69 6e65436f 6c6f722c (u_outlineColor, │ │ │ │ + 0x00dd90d0 20755f66 616b654f 75746c69 6e65436f u_fakeOutlineCo │ │ │ │ + 0x00dd90e0 6c6f722c 20636f65 66732e78 293b200a lor, coefs.x); . │ │ │ │ + 0x00dd90f0 20202020 6d61696e 4f75746c 696e6543 mainOutlineC │ │ │ │ + 0x00dd9100 6f6c6f72 203d206d 6978286d 61696e4f olor = mix(mainO │ │ │ │ + 0x00dd9110 75746c69 6e65436f 6c6f722c 20755f66 utlineColor, u_f │ │ │ │ + 0x00dd9120 616b654f 75746c69 6e65436f 6c6f722c akeOutlineColor, │ │ │ │ + 0x00dd9130 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00dd9140 76656334 20636f6c 6f72203d 206d6978 vec4 color = mix │ │ │ │ + 0x00dd9150 286d6978 286d6169 6e436f6c 6f722c20 (mix(mainColor, │ │ │ │ + 0x00dd9160 76656334 28765f63 6f6c6f72 2e726762 vec4(v_color.rgb │ │ │ │ + 0x00dd9170 2c20312e 30292c20 765f636f 6c6f722e , 1.0), v_color. │ │ │ │ + 0x00dd9180 61292c20 6d61696e 436f6c6f 722c2073 a), mainColor, s │ │ │ │ + 0x00dd9190 74657028 755f726f 75746550 6172616d tep(u_routeParam │ │ │ │ + 0x00dd91a0 732e772c 20302e30 29293b20 0a202020 s.w, 0.0)); . │ │ │ │ + 0x00dd91b0 20636f6c 6f72203d 206d6978 28636f6c color = mix(col │ │ │ │ + 0x00dd91c0 6f722c20 6d61696e 4f75746c 696e6543 or, mainOutlineC │ │ │ │ + 0x00dd91d0 6f6c6f72 2c207374 6570286b 4f75746c olor, step(kOutl │ │ │ │ + 0x00dd91e0 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ + 0x00dd91f0 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ + 0x00dd9200 3b200a20 20202063 6f6c6f72 203d206d ; . color = m │ │ │ │ + 0x00dd9210 69782863 6f6c6f72 2c206d61 696e4f75 ix(color, mainOu │ │ │ │ + 0x00dd9220 746c696e 65436f6c 6f722c20 736d6f6f tlineColor, smoo │ │ │ │ + 0x00dd9230 74687374 6570286b 4f75746c 696e6554 thstep(kOutlineT │ │ │ │ + 0x00dd9240 68726573 686f6c64 322c206b 4f75746c hreshold2, kOutl │ │ │ │ + 0x00dd9250 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ + 0x00dd9260 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ + 0x00dd9270 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ + 0x00dd9280 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ + 0x00dd9290 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ + 0x00dd92a0 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ + 0x00dd92b0 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ + 0x00dd92c0 29293b20 0a202020 20636f6c 6f72203d )); . color = │ │ │ │ + 0x00dd92d0 20766563 34286d69 7828636f 6c6f722e vec4(mix(color. │ │ │ │ + 0x00dd92e0 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ + 0x00dd92f0 2e726762 2c20755f 6d61736b 436f6c6f .rgb, u_maskColo │ │ │ │ + 0x00dd9300 722e6129 2c20636f 6c6f722e 61293b20 r.a), color.a); │ │ │ │ + 0x00dd9310 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00dd9320 203d2063 6f6c6f72 3b200a20 207d200a = color; . } . │ │ │ │ + 0x00dd9330 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd9340 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd9350 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd9360 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd9370 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd9380 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd9390 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd93a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd93b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd93c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd93d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd93e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd93f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd9400 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd9410 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd9420 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd9430 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd9440 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd9450 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd9460 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd9470 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd9480 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00dd9490 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00dd94a0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00dd94b0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00dd94c0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00dd94d0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00dd94e0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00dd94f0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00dd9500 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00dd9510 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00dd9520 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00dd9530 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00dd9540 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00dd9550 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00dd9560 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00dd9570 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00dd9580 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00dd9590 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00dd95a0 6d207665 63322075 5f706f73 6974696f m vec2 u_positio │ │ │ │ + 0x00dd95b0 6e3b200a 2020756e 69666f72 6d20666c n; . uniform fl │ │ │ │ + 0x00dd95c0 6f617420 755f6973 4f75746c 696e6550 oat u_isOutlineP │ │ │ │ + 0x00dd95d0 6173733b 200a2020 756e6966 6f726d20 ass; . uniform │ │ │ │ + 0x00dd95e0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00dd95f0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00dd9600 7420755f 6c656e67 74683b20 0a202075 t u_length; . u │ │ │ │ + 0x00dd9610 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00dd9620 20755f6d 61736b54 65783b20 0a202063 u_maskTex; . c │ │ │ │ + 0x00dd9630 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00dd9640 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00dd9650 3030302e 303b200a 20204c4f 575f5020 000.0; . LOW_P │ │ │ │ + 0x00dd9660 76656333 204d6f64 756c6174 65427950 vec3 ModulateByP │ │ │ │ + 0x00dd9670 61747465 726e446f 7473284c 4f575f50 atternDots(LOW_P │ │ │ │ + 0x00dd9680 20766563 3320636f 6c6f722c 20666c6f vec3 color, flo │ │ │ │ + 0x00dd9690 61742064 61726b65 6e2c2066 6c6f6174 at darken, float │ │ │ │ + 0x00dd96a0 20636f76 65726167 6529200a 20207b20 coverage) . { │ │ │ │ + 0x00dd96b0 0a202020 20636f6e 73742066 6c6f6174 . const float │ │ │ │ + 0x00dd96c0 206b4c69 67687465 6e203d20 302e3037 kLighten = 0.07 │ │ │ │ + 0x00dd96d0 353b200a 20202020 69662028 646f7428 5; . if (dot( │ │ │ │ + 0x00dd96e0 636f6c6f 722c2076 65633328 302e3231 color, vec3(0.21 │ │ │ │ + 0x00dd96f0 32362c20 302e3731 35322c20 302e3037 26, 0.7152, 0.07 │ │ │ │ + 0x00dd9700 32322929 203c2030 2e352920 0a202020 22)) < 0.5) . │ │ │ │ + 0x00dd9710 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ + 0x00dd9720 2b20636f 76657261 6765202a 206b4c69 + coverage * kLi │ │ │ │ + 0x00dd9730 67687465 6e3b200a 20202020 72657475 ghten; . retu │ │ │ │ + 0x00dd9740 726e2063 6f6c6f72 202a206d 69782831 rn color * mix(1 │ │ │ │ + 0x00dd9750 2e302c20 6461726b 656e2c20 636f7665 .0, darken, cove │ │ │ │ + 0x00dd9760 72616765 293b200a 20207d20 0a202076 rage); . } . v │ │ │ │ + 0x00dd9770 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00dd9780 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00dd9790 5f565446 200a2020 20204c4f 575f5020 _VTF . LOW_P │ │ │ │ + 0x00dd97a0 76656334 20676c79 7068436f 6c6f7220 vec4 glyphColor │ │ │ │ + 0x00dd97b0 3d20765f 636f6c6f 723b200a 20202365 = v_color; . #e │ │ │ │ + 0x00dd97c0 6c736520 0a202020 204c4f57 5f502076 lse . LOW_P v │ │ │ │ + 0x00dd97d0 65633420 676c7970 68436f6c 6f72203d ec4 glyphColor = │ │ │ │ + 0x00dd97e0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00dd97f0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00dd9800 6f6f7264 293b200a 20202365 6e646966 oord); . #endif │ │ │ │ + 0x00dd9810 200a2020 2020666c 6f617420 64697374 . float dist │ │ │ │ + 0x00dd9820 203d2074 65787475 72652875 5f6d6173 = texture(u_mas │ │ │ │ + 0x00dd9830 6b546578 2c20765f 6d61736b 54657843 kTex, v_maskTexC │ │ │ │ + 0x00dd9840 6f6f7264 292e723b 200a2020 2020666c oord).r; . fl │ │ │ │ + 0x00dd9850 6f617420 616c7068 61203d20 736d6f6f oat alpha = smoo │ │ │ │ + 0x00dd9860 74687374 65702875 5f636f6e 74726173 thstep(u_contras │ │ │ │ + 0x00dd9870 7447616d 6d612e78 202d2075 5f636f6e tGamma.x - u_con │ │ │ │ + 0x00dd9880 74726173 7447616d 6d612e79 2c20755f trastGamma.y, u_ │ │ │ │ + 0x00dd9890 636f6e74 72617374 47616d6d 612e7820 contrastGamma.x │ │ │ │ + 0x00dd98a0 2b20755f 636f6e74 72617374 47616d6d + u_contrastGamm │ │ │ │ + 0x00dd98b0 612e792c 20646973 7429202a 20755f6f a.y, dist) * u_o │ │ │ │ + 0x00dd98c0 70616369 74793b20 0a202020 20676c79 pacity; . gly │ │ │ │ + 0x00dd98d0 7068436f 6c6f722e 61202a3d 20616c70 phColor.a *= alp │ │ │ │ + 0x00dd98e0 68613b20 0a202020 20765f46 72616743 ha; . v_FragC │ │ │ │ + 0x00dd98f0 6f6c6f72 203d2067 6c797068 436f6c6f olor = glyphColo │ │ │ │ + 0x00dd9900 723b200a 20207d20 0a000000 00000000 r; . } ........ │ │ │ │ + 0x00dd9910 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dd9920 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd9930 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd9940 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd9950 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd9960 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd9970 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd9980 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd9990 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd99a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd99b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd99c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd99d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd99e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd99f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd9a00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd9a10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd9a20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd9a30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd9a40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd9a50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd9a60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd9a70 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00dd9a80 696e2076 65633220 765f7465 78436f6f in vec2 v_texCoo │ │ │ │ + 0x00dd9a90 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00dd9aa0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00dd9ab0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00dd9ac0 7472616e 73666f72 6d3b200a 2020756e transform; . un │ │ │ │ + 0x00dd9ad0 69666f72 6d206d61 74342075 5f6e6f72 iform mat4 u_nor │ │ │ │ + 0x00dd9ae0 6d616c54 72616e73 666f726d 3b200a20 malTransform; . │ │ │ │ + 0x00dd9af0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00dd9b00 636f6c6f 723b200a 2020756e 69666f72 color; . unifor │ │ │ │ + 0x00dd9b10 6d207665 63322075 5f746578 436f6f72 m vec2 u_texCoor │ │ │ │ + 0x00dd9b20 64466c69 7070696e 673b200a 2020756e dFlipping; . un │ │ │ │ + 0x00dd9b30 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00dd9b40 755f636f 6c6f7254 65783b20 0a202063 u_colorTex; . c │ │ │ │ + 0x00dd9b50 6f6e7374 20766563 33206c69 67687444 onst vec3 lightD │ │ │ │ + 0x00dd9b60 6972203d 20766563 3328302e 3331362c ir = vec3(0.316, │ │ │ │ + 0x00dd9b70 20302e30 2c20302e 39343829 3b200a20 0.0, 0.948); . │ │ │ │ + 0x00dd9b80 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00dd9b90 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00dd9ba0 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ + 0x00dd9bb0 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ + 0x00dd9bc0 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ + 0x00dd9bd0 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ + 0x00dd9be0 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ + 0x00dd9bf0 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ + 0x00dd9c00 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ + 0x00dd9c10 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ + 0x00dd9c20 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ + 0x00dd9c30 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ + 0x00dd9c40 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ + 0x00dd9c50 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ + 0x00dd9c60 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ + 0x00dd9c70 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ + 0x00dd9c80 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ + 0x00dd9c90 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ + 0x00dd9ca0 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ + 0x00dd9cb0 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ + 0x00dd9cc0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00dd9cd0 7b200a20 20202066 6c6f6174 2070686f { . float pho │ │ │ │ + 0x00dd9ce0 6e674469 66667573 65203d20 6d617828 ngDiffuse = max( │ │ │ │ + 0x00dd9cf0 302e302c 202d646f 74286c69 67687444 0.0, -dot(lightD │ │ │ │ + 0x00dd9d00 69722c20 765f6e6f 726d616c 29293b20 ir, v_normal)); │ │ │ │ + 0x00dd9d10 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ + 0x00dd9d20 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ + 0x00dd9d30 72546578 2c20765f 74657843 6f6f7264 rTex, v_texCoord │ │ │ │ + 0x00dd9d40 7329202a 20755f63 6f6c6f72 3b200a20 s) * u_color; . │ │ │ │ + 0x00dd9d50 20202076 5f467261 67436f6c 6f72203d v_FragColor = │ │ │ │ + 0x00dd9d60 20766563 34282870 686f6e67 44696666 vec4((phongDiff │ │ │ │ + 0x00dd9d70 75736520 2a20302e 35202b20 302e3529 use * 0.5 + 0.5) │ │ │ │ + 0x00dd9d80 202a2063 6f6c6f72 2e726762 2c20636f * color.rgb, co │ │ │ │ + 0x00dd9d90 6c6f722e 61293b20 0a20207d 200a0000 lor.a); . } ... │ │ │ │ + 0x00dd9da0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dd9db0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dd9dc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dd9dd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dd9de0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dd9df0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dd9e00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dd9e10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dd9e20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dd9e30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dd9e40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dd9e50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dd9e60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dd9e70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dd9e80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dd9e90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dd9ea0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dd9eb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dd9ec0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dd9ed0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dd9ee0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dd9ef0 63342076 5f636f6c 6f723b20 0a20206f c4 v_color; . o │ │ │ │ + 0x00dd9f00 75742076 65633420 765f4672 6167436f ut vec4 v_FragCo │ │ │ │ + 0x00dd9f10 6c6f723b 200a2020 636f6e73 7420666c lor; . const fl │ │ │ │ + 0x00dd9f20 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00dd9f30 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00dd9f40 0a20204c 4f575f50 20766563 33204d6f . LOW_P vec3 Mo │ │ │ │ + 0x00dd9f50 64756c61 74654279 50617474 65726e44 dulateByPatternD │ │ │ │ + 0x00dd9f60 6f747328 4c4f575f 50207665 63332063 ots(LOW_P vec3 c │ │ │ │ + 0x00dd9f70 6f6c6f72 2c20666c 6f617420 6461726b olor, float dark │ │ │ │ + 0x00dd9f80 656e2c20 666c6f61 7420636f 76657261 en, float covera │ │ │ │ + 0x00dd9f90 67652920 0a20207b 200a2020 2020636f ge) . { . co │ │ │ │ + 0x00dd9fa0 6e737420 666c6f61 74206b4c 69676874 nst float kLight │ │ │ │ + 0x00dd9fb0 656e203d 20302e30 37353b20 0a202020 en = 0.075; . │ │ │ │ + 0x00dd9fc0 20696620 28646f74 28636f6c 6f722c20 if (dot(color, │ │ │ │ + 0x00dd9fd0 76656333 28302e32 3132362c 20302e37 vec3(0.2126, 0.7 │ │ │ │ + 0x00dd9fe0 3135322c 20302e30 37323229 29203c20 152, 0.0722)) < │ │ │ │ + 0x00dd9ff0 302e3529 200a2020 20202020 72657475 0.5) . retu │ │ │ │ + 0x00dda000 726e2063 6f6c6f72 202b2063 6f766572 rn color + cover │ │ │ │ + 0x00dda010 61676520 2a206b4c 69676874 656e3b20 age * kLighten; │ │ │ │ + 0x00dda020 0a202020 20726574 75726e20 636f6c6f . return colo │ │ │ │ + 0x00dda030 72202a20 6d697828 312e302c 20646172 r * mix(1.0, dar │ │ │ │ + 0x00dda040 6b656e2c 20636f76 65726167 65293b20 ken, coverage); │ │ │ │ + 0x00dda050 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00dda060 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ + 0x00dda070 46726167 436f6c6f 72203d20 765f636f FragColor = v_co │ │ │ │ + 0x00dda080 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00dda090 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dda0a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dda0b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dda0c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dda0d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dda0e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dda0f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dda100 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dda110 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dda120 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dda130 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dda140 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dda150 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dda160 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dda170 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dda180 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dda190 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dda1a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dda1b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dda1c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dda1d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dda1e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dda1f0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00dda200 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00dda210 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00dda220 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00dda230 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00dda240 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ + 0x00dda250 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ + 0x00dda260 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ + 0x00dda270 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00dda280 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ + 0x00dda290 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ + 0x00dda2a0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00dda2b0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00dda2c0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00dda2d0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00dda2e0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00dda2f0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00dda300 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00dda310 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00dda320 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dda330 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00dda340 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00dda350 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00dda360 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dda370 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00dda380 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00dda390 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00dda3a0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00dda3b0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00dda3c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dda3d0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00dda3e0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00dda3f0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00dda400 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00dda410 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00dda420 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00dda430 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dda440 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00dda450 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00dda460 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dda470 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00dda480 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00dda490 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dda4a0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00dda4b0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00dda4c0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00dda4d0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00dda4e0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00dda4f0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00dda500 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00dda510 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00dda520 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00dda530 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00dda540 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00dda550 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00dda560 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00dda570 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00dda580 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00dda590 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00dda5a0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00dda5b0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00dda5c0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00dda5d0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00dda5e0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00dda5f0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00dda600 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00dda610 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00dda620 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00dda630 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00dda640 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00dda650 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00dda660 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00dda670 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00dda680 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00dda690 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00dda6a0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00dda6b0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00dda6c0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00dda6d0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00dda6e0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00dda6f0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00dda700 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00dda710 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00dda720 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00dda730 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00dda740 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00dda750 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00dda760 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00dda770 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00dda780 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00dda790 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00dda7a0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00dda7b0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00dda7c0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00dda7d0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00dda7e0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00dda7f0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00dda800 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00dda810 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00dda820 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00dda830 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ + 0x00dda840 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ + 0x00dda850 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ + 0x00dda860 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ + 0x00dda870 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00dda880 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ + 0x00dda890 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ + 0x00dda8a0 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ + 0x00dda8b0 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ + 0x00dda8c0 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ + 0x00dda8d0 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ + 0x00dda8e0 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ + 0x00dda8f0 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ + 0x00dda900 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ + 0x00dda910 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ + 0x00dda920 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00dda930 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ + 0x00dda940 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ + 0x00dda950 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ + 0x00dda960 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ + 0x00dda970 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ + 0x00dda980 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00dda990 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00dda9a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dda9b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dda9c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dda9d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dda9e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dda9f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddaa00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddaa10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddaa20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddaa30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddaa40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddaa50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddaa60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddaa70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddaa80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddaa90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddaaa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddaab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddaac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddaad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddaae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddaaf0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00ddab00 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00ddab10 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ + 0x00ddab20 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ + 0x00ddab30 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ + 0x00ddab40 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00ddab50 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ + 0x00ddab60 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ + 0x00ddab70 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ + 0x00ddab80 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00ddab90 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00ddaba0 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00ddabb0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00ddabc0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00ddabd0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00ddabe0 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00ddabf0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00ddac00 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00ddac10 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00ddac20 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00ddac30 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00ddac40 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00ddac50 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00ddac60 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00ddac70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00ddac80 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00ddac90 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00ddaca0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ddacb0 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00ddacc0 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00ddacd0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00ddace0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00ddacf0 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00ddad00 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00ddad10 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00ddad20 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00ddad30 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00ddad40 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00ddad50 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00ddad60 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00ddad70 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00ddad80 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00ddad90 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00ddada0 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00ddadb0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00ddadc0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00ddadd0 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00ddade0 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00ddadf0 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00ddae00 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00ddae10 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00ddae20 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00ddae30 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00ddae40 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00ddae50 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00ddae60 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00ddae70 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00ddae80 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00ddae90 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00ddaea0 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00ddaeb0 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00ddaec0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00ddaed0 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00ddaee0 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00ddaef0 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00ddaf00 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00ddaf10 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00ddaf20 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00ddaf30 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00ddaf40 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00ddaf50 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00ddaf60 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00ddaf70 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00ddaf80 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00ddaf90 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00ddafa0 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00ddafb0 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00ddafc0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00ddafd0 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00ddafe0 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00ddaff0 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00ddb000 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00ddb010 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00ddb020 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00ddb030 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00ddb040 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00ddb050 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00ddb060 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00ddb070 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00ddb080 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00ddb090 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00ddb0a0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00ddb0b0 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00ddb0c0 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00ddb0d0 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00ddb0e0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00ddb0f0 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00ddb100 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00ddb110 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ + 0x00ddb120 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ + 0x00ddb130 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ + 0x00ddb140 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00ddb150 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00ddb160 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00ddb170 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ + 0x00ddb180 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00ddb190 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00ddb1a0 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00ddb1b0 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00ddb1c0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00ddb1d0 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00ddb1e0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00ddb1f0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00ddb200 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ + 0x00ddb210 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00ddb220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ddb230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ddb240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ddb250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddb260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddb270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddb280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddb290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddb2a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddb2b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddb2c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddb2d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddb2e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddb2f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddb300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddb310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddb320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddb330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddb340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddb350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddb360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddb370 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00ddb380 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00ddb390 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00ddb3a0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00ddb3b0 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00ddb3c0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00ddb3d0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00ddb3e0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00ddb3f0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00ddb400 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00ddb410 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00ddb420 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00ddb430 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00ddb440 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ + 0x00ddb450 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ + 0x00ddb460 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ + 0x00ddb470 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ + 0x00ddb480 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ + 0x00ddb490 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00ddb4a0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00ddb4b0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00ddb4c0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00ddb4d0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00ddb4e0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00ddb4f0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00ddb500 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00ddb510 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00ddb520 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00ddb530 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00ddb540 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00ddb550 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00ddb560 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00ddb570 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00ddb580 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00ddb590 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00ddb5a0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00ddb5b0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00ddb5c0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00ddb5d0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00ddb5e0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00ddb5f0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00ddb600 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00ddb610 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00ddb620 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00ddb630 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00ddb640 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00ddb650 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00ddb660 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00ddb670 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00ddb680 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00ddb690 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00ddb6a0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00ddb6b0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00ddb6c0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00ddb6d0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00ddb6e0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00ddb6f0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00ddb700 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00ddb710 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00ddb720 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00ddb730 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00ddb740 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00ddb750 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00ddb760 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00ddb770 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00ddb780 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00ddb790 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00ddb7a0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00ddb7b0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00ddb7c0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00ddb7d0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00ddb7e0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00ddb7f0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00ddb800 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00ddb810 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00ddb820 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00ddb830 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00ddb840 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00ddb850 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00ddb860 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00ddb870 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00ddb880 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00ddb890 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00ddb8a0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00ddb8b0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00ddb8c0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00ddb8d0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00ddb8e0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00ddb8f0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00ddb900 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00ddb910 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00ddb920 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00ddb930 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00ddb940 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00ddb950 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00ddb960 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00ddb970 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00ddb980 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00ddb990 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00ddb9a0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00ddb9b0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00ddb9c0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00ddb9d0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00ddb9e0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00ddb9f0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00ddba00 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00ddba10 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00ddba20 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00ddba30 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ + 0x00ddba40 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ + 0x00ddba50 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00ddba60 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00ddba70 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00ddba80 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00ddba90 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00ddbaa0 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ + 0x00ddbab0 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ + 0x00ddbac0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00ddbad0 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ + 0x00ddbae0 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ + 0x00ddbaf0 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ + 0x00ddbb00 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ + 0x00ddbb10 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00ddbb20 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ + 0x00ddbb30 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00ddbb40 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ + 0x00ddbb50 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ + 0x00ddbb60 20202020 20202020 20202020 20202020 │ │ │ │ 0x00ddbb70 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00ddbb80 20202020 2020765f 72616469 75732e78 v_radius.x │ │ │ │ - 0x00ddbb90 202a2076 5f726164 6975732e 78202b20 * v_radius.x + │ │ │ │ - 0x00ddbba0 765f7261 64697573 2e79202a 20765f72 v_radius.y * v_r │ │ │ │ - 0x00ddbbb0 61646975 732e7929 3b200a20 20202066 adius.y); . f │ │ │ │ - 0x00ddbbc0 696e616c 436f6c6f 722e6120 3d206669 inalColor.a = fi │ │ │ │ - 0x00ddbbd0 6e616c43 6f6c6f72 2e61202a 20755f6f nalColor.a * u_o │ │ │ │ - 0x00ddbbe0 70616369 7479202a 2028312e 30202d20 pacity * (1.0 - │ │ │ │ - 0x00ddbbf0 73746570 56616c75 65293b20 0a202020 stepValue); . │ │ │ │ - 0x00ddbc00 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ - 0x00ddbc10 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ - 0x00ddbc20 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00ddbc30 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00ddbc40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddbc50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddbc60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddbc70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddbc80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddbc90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddbca0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddbcb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddbcc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddbcd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddbce0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddbcf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddbd00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddbd10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddbd20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddbd30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddbd40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddbd50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddbd60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddbd70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddbd80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddbd90 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00ddbda0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00ddbdb0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00ddbdc0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00ddbdd0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00ddbde0 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ - 0x00ddbdf0 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ - 0x00ddbe00 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ - 0x00ddbe10 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00ddbe20 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00ddbe30 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ - 0x00ddbe40 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ - 0x00ddbe50 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00ddbe60 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00ddbe70 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00ddbe80 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00ddbe90 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00ddbea0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00ddbeb0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00ddbec0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00ddbed0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00ddbee0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ddbef0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00ddbf00 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00ddbf10 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00ddbf20 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00ddbf30 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00ddbf40 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00ddbf50 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00ddbf60 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00ddbf70 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00ddbf80 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00ddbf90 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00ddbfa0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00ddbfb0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00ddbfc0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00ddbfd0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00ddbfe0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00ddbff0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00ddc000 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00ddc010 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00ddc020 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00ddc030 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00ddc040 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00ddc050 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00ddc060 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00ddc070 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00ddc080 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00ddc090 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00ddc0a0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00ddc0b0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00ddc0c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00ddc0d0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00ddc0e0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00ddc0f0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00ddc100 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00ddc110 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00ddc120 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00ddc130 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00ddc140 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00ddc150 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00ddc160 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00ddc170 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00ddc180 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00ddc190 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00ddc1a0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00ddc1b0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00ddc1c0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00ddc1d0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00ddc1e0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00ddc1f0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00ddc200 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00ddc210 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00ddc220 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00ddc230 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00ddc240 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00ddc250 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00ddc260 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00ddc270 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00ddc280 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00ddc290 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00ddc2a0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00ddc2b0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00ddc2c0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00ddc2d0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00ddc2e0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00ddc2f0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00ddc300 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00ddc310 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00ddc320 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00ddc330 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00ddc340 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00ddc350 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00ddc360 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00ddc370 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00ddc380 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00ddc390 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00ddc3a0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00ddc3b0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00ddc3c0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00ddc3d0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00ddc3e0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00ddc3f0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00ddc400 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00ddc410 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00ddc420 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00ddc430 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00ddc440 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00ddc450 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00ddc460 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00ddc470 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00ddc480 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00ddc490 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00ddc4a0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00ddc4b0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00ddc4c0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00ddc4d0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00ddc4e0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00ddc4f0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00ddc500 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00ddc510 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00ddc520 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00ddc530 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00ddc540 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00ddc550 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00ddc560 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00ddc570 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ - 0x00ddc580 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00ddc590 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00ddc5a0 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ - 0x00ddc5b0 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ - 0x00ddc5c0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00ddc5d0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00ddc5e0 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00ddc5f0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00ddc600 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00ddc610 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00ddc620 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00ddc630 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00ddc640 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00ddc650 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ - 0x00ddc660 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ - 0x00ddc670 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00ddc680 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddc690 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddc6a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddc6b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddc6c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddc6d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddc6e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddc6f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddc700 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddc710 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddc720 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddc730 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddc740 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddc750 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddc760 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddc770 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddc780 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddc790 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddc7a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddc7b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddc7c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddc7d0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00ddc7e0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00ddc7f0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00ddc800 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00ddc810 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00ddc820 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00ddc830 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00ddc840 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00ddc850 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00ddc860 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00ddc870 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00ddc880 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00ddc890 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00ddc8a0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00ddc8b0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00ddc8c0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00ddc8d0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00ddc8e0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00ddc8f0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00ddc900 733b200a 2020636f 6e737420 666c6f61 s; . const floa │ │ │ │ - 0x00ddc910 74206b41 6e746961 6c696173 696e6753 t kAntialiasingS │ │ │ │ - 0x00ddc920 63616c61 72203d20 302e393b 200a2020 calar = 0.9; . │ │ │ │ - 0x00ddc930 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00ddc940 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00ddc950 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ - 0x00ddc960 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ - 0x00ddc970 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ - 0x00ddc980 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ - 0x00ddc990 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ - 0x00ddc9a0 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ - 0x00ddc9b0 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ - 0x00ddc9c0 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ - 0x00ddc9d0 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ - 0x00ddc9e0 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ - 0x00ddc9f0 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ - 0x00ddca00 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ - 0x00ddca10 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00ddca20 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ - 0x00ddca30 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ - 0x00ddca40 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ - 0x00ddca50 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ - 0x00ddca60 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ - 0x00ddca70 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00ddca80 200a2020 2020666c 6f617420 64203d20 . float d = │ │ │ │ - 0x00ddca90 646f7428 765f7261 64697573 2e78792c dot(v_radius.xy, │ │ │ │ - 0x00ddcaa0 20765f72 61646975 732e7879 293b200a v_radius.xy); . │ │ │ │ - 0x00ddcab0 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ - 0x00ddcac0 6c6f7220 3d20765f 636f6c6f 723b200a lor = v_color; . │ │ │ │ - 0x00ddcad0 20202020 666c6f61 74206161 52616469 float aaRadi │ │ │ │ - 0x00ddcae0 7573203d 20765f72 61646975 732e7a20 us = v_radius.z │ │ │ │ - 0x00ddcaf0 2a206b41 6e746961 6c696173 696e6753 * kAntialiasingS │ │ │ │ - 0x00ddcb00 63616c61 723b200a 20202020 666c6f61 calar; . floa │ │ │ │ - 0x00ddcb10 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ - 0x00ddcb20 6f6f7468 73746570 28616152 61646975 oothstep(aaRadiu │ │ │ │ - 0x00ddcb30 73202a20 61615261 64697573 2c20765f s * aaRadius, v_ │ │ │ │ - 0x00ddcb40 72616469 75732e7a 202a2076 5f726164 radius.z * v_rad │ │ │ │ - 0x00ddcb50 6975732e 7a2c2064 293b200a 20202020 ius.z, d); . │ │ │ │ - 0x00ddcb60 66696e61 6c436f6c 6f722e61 203d2066 finalColor.a = f │ │ │ │ - 0x00ddcb70 696e616c 436f6c6f 722e6120 2a20755f inalColor.a * u_ │ │ │ │ - 0x00ddcb80 6f706163 69747920 2a202831 2e30202d opacity * (1.0 - │ │ │ │ - 0x00ddcb90 20737465 7056616c 7565293b 200a2020 stepValue); . │ │ │ │ - 0x00ddcba0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00ddcbb0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00ddcbc0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00ddcbd0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00ddcbe0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddcbf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddcc00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddcc10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddcc20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddcc30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddcc40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddcc50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddcc60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddcc70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddcc80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddcc90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddcca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddccb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddccc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddccd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddcce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddccf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddcd00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddcd10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddcd20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddcd30 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ - 0x00ddcd40 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ - 0x00ddcd50 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ - 0x00ddcd60 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00ddcd70 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00ddcd80 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00ddcd90 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00ddcda0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00ddcdb0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00ddcdc0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00ddcdd0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00ddcde0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00ddcdf0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00ddce00 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ - 0x00ddce10 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00ddce20 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00ddce30 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00ddce40 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ - 0x00ddce50 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ - 0x00ddce60 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ - 0x00ddce70 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ - 0x00ddce80 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ - 0x00ddce90 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00ddcea0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00ddceb0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00ddcec0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00ddced0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00ddcee0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00ddcef0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00ddcf00 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00ddcf10 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00ddcf20 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00ddcf30 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00ddcf40 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00ddcf50 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00ddcf60 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00ddcf70 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00ddcf80 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00ddcf90 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00ddcfa0 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00ddcfb0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00ddcfc0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00ddcfd0 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00ddcfe0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00ddcff0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00ddd000 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00ddd010 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00ddd020 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00ddd030 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00ddd040 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00ddd050 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00ddd060 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00ddd070 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00ddd080 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00ddd090 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00ddd0a0 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00ddd0b0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00ddd0c0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00ddd0d0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00ddd0e0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00ddd0f0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00ddd100 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00ddd110 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00ddd120 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00ddd130 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00ddd140 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00ddd150 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00ddd160 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00ddd170 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00ddd180 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00ddd190 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00ddd1a0 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00ddd1b0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00ddd1c0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00ddd1d0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00ddd1e0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00ddd1f0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00ddd200 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00ddd210 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00ddd220 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00ddd230 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00ddd240 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00ddd250 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00ddd260 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00ddd270 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00ddd280 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00ddd290 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00ddd2a0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00ddd2b0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00ddd2c0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00ddd2d0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00ddd2e0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00ddd2f0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00ddd300 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00ddd310 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00ddd320 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00ddd330 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00ddd340 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00ddd350 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00ddd360 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00ddd370 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00ddd380 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00ddd390 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00ddd3a0 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00ddd3b0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00ddd3c0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00ddd3d0 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00ddd3e0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00ddd3f0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00ddd400 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00ddd410 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00ddd420 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00ddd430 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ - 0x00ddd440 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ - 0x00ddd450 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ - 0x00ddd460 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00ddd470 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ - 0x00ddd480 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ - 0x00ddd490 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ - 0x00ddd4a0 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ - 0x00ddd4b0 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ - 0x00ddd4c0 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ - 0x00ddd4d0 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00ddd4e0 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ - 0x00ddd4f0 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ - 0x00ddd500 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00ddd510 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00ddd520 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ - 0x00ddd530 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ - 0x00ddd540 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00ddd550 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00ddd560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddd570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddd580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddd590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddd5a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddd5b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddd5c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddd5d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddd5e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddd5f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddd600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddd610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddd620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddd630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddd640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddd650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddd660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddd670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddd680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddd690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddd6a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddd6b0 63342076 5f6e6f72 6d616c3b 200a2020 c4 v_normal; . │ │ │ │ - 0x00ddd6c0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00ddd6d0 46200a20 20696e20 4c4f575f 50207665 F . in LOW_P ve │ │ │ │ - 0x00ddd6e0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00ddd6f0 656c7365 200a2020 696e2076 65633220 else . in vec2 │ │ │ │ - 0x00ddd700 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00ddd710 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ - 0x00ddd720 706c6572 32442075 5f636f6c 6f725465 pler2D u_colorTe │ │ │ │ - 0x00ddd730 783b200a 20202365 6e646966 200a2020 x; . #endif . │ │ │ │ - 0x00ddd740 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00ddd750 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00ddd760 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00ddd770 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00ddd780 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00ddd790 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00ddd7a0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00ddd7b0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00ddd7c0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00ddd7d0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00ddd7e0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00ddd7f0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00ddd800 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00ddd810 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00ddd820 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00ddd830 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00ddd840 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00ddd850 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ - 0x00ddd860 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ - 0x00ddd870 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ - 0x00ddd880 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00ddd890 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00ddd8a0 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ - 0x00ddd8b0 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ - 0x00ddd8c0 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ - 0x00ddd8d0 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ - 0x00ddd8e0 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ - 0x00ddd8f0 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ - 0x00ddd900 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ - 0x00ddd910 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ - 0x00ddd920 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ - 0x00ddd930 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ - 0x00ddd940 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ - 0x00ddd950 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ - 0x00ddd960 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ - 0x00ddd970 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ - 0x00ddd980 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ - 0x00ddd990 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ - 0x00ddd9a0 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ - 0x00ddd9b0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00ddd9c0 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ - 0x00ddd9d0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00ddd9e0 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ - 0x00ddd9f0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ - 0x00ddda00 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ - 0x00ddda10 20766563 3420636f 6c6f7220 3d207465 vec4 color = te │ │ │ │ - 0x00ddda20 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00ddda30 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ - 0x00ddda40 6473293b 200a2020 23656e64 6966200a ds); . #endif . │ │ │ │ - 0x00ddda50 20202020 666c6f61 74207231 203d2028 float r1 = ( │ │ │ │ - 0x00ddda60 765f6e6f 726d616c 2e7a202d 20616150 v_normal.z - aaP │ │ │ │ - 0x00ddda70 6978656c 73436f75 6e742920 2a202876 ixelsCount) * (v │ │ │ │ - 0x00ddda80 5f6e6f72 6d616c2e 7a202d20 61615069 _normal.z - aaPi │ │ │ │ - 0x00ddda90 78656c73 436f756e 74293b20 0a202020 xelsCount); . │ │ │ │ - 0x00dddaa0 20666c6f 61742072 32203d20 765f6e6f float r2 = v_no │ │ │ │ - 0x00dddab0 726d616c 2e78202a 20765f6e 6f726d61 rmal.x * v_norma │ │ │ │ - 0x00dddac0 6c2e7820 2b20765f 6e6f726d 616c2e79 l.x + v_normal.y │ │ │ │ - 0x00dddad0 202a2076 5f6e6f72 6d616c2e 793b200a * v_normal.y; . │ │ │ │ - 0x00dddae0 20202020 666c6f61 74207233 203d2076 float r3 = v │ │ │ │ - 0x00dddaf0 5f6e6f72 6d616c2e 7a202a20 765f6e6f _normal.z * v_no │ │ │ │ - 0x00dddb00 726d616c 2e7a3b20 0a202020 20666c6f rmal.z; . flo │ │ │ │ - 0x00dddb10 61742061 6c706861 203d206d 69782873 at alpha = mix(s │ │ │ │ - 0x00dddb20 74657028 72332c20 7232292c 20736d6f tep(r3, r2), smo │ │ │ │ - 0x00dddb30 6f746873 74657028 72312c20 72332c20 othstep(r1, r3, │ │ │ │ - 0x00dddb40 7232292c 20765f6e 6f726d61 6c2e7729 r2), v_normal.w) │ │ │ │ - 0x00dddb50 3b200a20 2020204c 4f575f50 20766563 ; . LOW_P vec │ │ │ │ - 0x00dddb60 34206669 6e616c43 6f6c6f72 203d2063 4 finalColor = c │ │ │ │ - 0x00dddb70 6f6c6f72 3b200a20 20202066 696e616c olor; . final │ │ │ │ - 0x00dddb80 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ - 0x00dddb90 6f6c6f72 2e61202a 20755f6f 70616369 olor.a * u_opaci │ │ │ │ - 0x00dddba0 7479202a 2028312e 30202d20 616c7068 ty * (1.0 - alph │ │ │ │ - 0x00dddbb0 61293b20 0a202020 20696620 2866696e a); . if (fin │ │ │ │ - 0x00dddbc0 616c436f 6c6f722e 61203d3d 20302e30 alColor.a == 0.0 │ │ │ │ - 0x00dddbd0 29200a20 20202020 20646973 63617264 ) . discard │ │ │ │ - 0x00dddbe0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00dddbf0 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ - 0x00dddc00 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00dddc10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dddc20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dddc30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dddc40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dddc50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dddc60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dddc70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dddc80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dddc90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dddca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dddcb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dddcc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dddcd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dddce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dddcf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dddd00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dddd10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dddd20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dddd30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dddd40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dddd50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dddd60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dddd70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dddd80 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00dddd90 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00dddda0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00ddddb0 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00ddddc0 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00ddddd0 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00dddde0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00ddddf0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00ddde00 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00ddde10 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00ddde20 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00ddde30 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00ddde40 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00ddde50 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00ddde60 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00ddde70 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00ddde80 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00ddde90 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00dddea0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00dddeb0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00dddec0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ddded0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00dddee0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00dddef0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00dddf00 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00dddf10 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00dddf20 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00dddf30 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00dddf40 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00dddf50 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00dddf60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00dddf70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00dddf80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00dddf90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00dddfa0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00dddfb0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00dddfc0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00dddfd0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00dddfe0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00dddff0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00dde000 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00dde010 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00dde020 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00dde030 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00dde040 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00dde050 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00dde060 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00dde070 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00dde080 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00dde090 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00dde0a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dde0b0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00dde0c0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00dde0d0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00dde0e0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00dde0f0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00dde100 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00dde110 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00dde120 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00dde130 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00dde140 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00dde150 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00dde160 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00dde170 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00dde180 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00dde190 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00dde1a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00dde1b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00dde1c0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00dde1d0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00dde1e0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00dde1f0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00dde200 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00dde210 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00dde220 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00dde230 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00dde240 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00dde250 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00dde260 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00dde270 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00dde280 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00dde290 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00dde2a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00dde2b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00dde2c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00dde2d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00dde2e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00dde2f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00dde300 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00dde310 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00dde320 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00dde330 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00dde340 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00dde350 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00dde360 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00dde370 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00dde380 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00dde390 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00dde3a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00dde3b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00dde3c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00dde3d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00dde3e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00dde3f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00dde400 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00dde410 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00dde420 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00dde430 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00dde440 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00dde450 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00dde460 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00dde470 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00dde480 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00dde490 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00dde4a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00dde4b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00dde4c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00dde4d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00dde4e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00dde4f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00dde500 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00dde510 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00dde520 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00dde530 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00dde540 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00dde550 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ - 0x00dde560 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ - 0x00dde570 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ - 0x00dde580 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00dde590 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ - 0x00dde5a0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00dde5b0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00dde5c0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00dde5d0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00dde5e0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00dde5f0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00dde600 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ - 0x00dde610 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ - 0x00dde620 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ - 0x00dde630 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ - 0x00dde640 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ - 0x00dde650 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ - 0x00dde660 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ - 0x00dde670 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00dde680 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dde690 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dde6a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dde6b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dde6c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dde6d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dde6e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dde6f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dde700 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dde710 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dde720 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dde730 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dde740 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dde750 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dde760 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dde770 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dde780 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dde790 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dde7a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dde7b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dde7c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dde7d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dde7e0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00dde7f0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00dde800 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00dde810 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00dde820 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00dde830 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00dde840 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00dde850 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00dde860 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00dde870 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00dde880 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00dde890 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00dde8a0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00dde8b0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00dde8c0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00dde8d0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00dde8e0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00dde8f0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00dde900 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00dde910 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00dde920 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00dde930 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00dde940 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00dde950 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00dde960 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00dde970 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00dde980 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00dde990 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00dde9a0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00dde9b0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00dde9c0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00dde9d0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00dde9e0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00dde9f0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00ddea00 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00ddea10 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00ddea20 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00ddea30 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00ddea40 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00ddea50 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00ddea60 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00ddea70 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00ddea80 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00ddea90 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00ddeaa0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00ddeab0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00ddeac0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00ddead0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00ddeae0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00ddeaf0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00ddeb00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00ddeb10 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00ddeb20 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00ddeb30 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00ddeb40 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00ddeb50 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00ddeb60 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00ddeb70 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00ddeb80 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00ddeb90 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00ddeba0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00ddebb0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00ddebc0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00ddebd0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00ddebe0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00ddebf0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00ddec00 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00ddec10 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00ddec20 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00ddec30 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00ddec40 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00ddec50 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00ddec60 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00ddec70 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00ddec80 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00ddec90 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00ddeca0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00ddecb0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00ddecc0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00ddecd0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00ddece0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00ddecf0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00dded00 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00dded10 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00dded20 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00dded30 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00dded40 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00dded50 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00dded60 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00dded70 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00dded80 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00dded90 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00ddeda0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00ddedb0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00ddedc0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00ddedd0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00ddede0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00ddedf0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00ddee00 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00ddee10 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00ddee20 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00ddee30 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00ddee40 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00ddee50 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00ddee60 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00ddee70 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00ddee80 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00ddee90 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00ddeea0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00ddeeb0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00ddeec0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00ddeed0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00ddeee0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00ddeef0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00ddef00 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00ddef10 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00ddef20 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00ddef30 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00ddef40 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00ddef50 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00ddef60 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00ddef70 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00ddef80 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00ddef90 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00ddefa0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00ddefb0 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ - 0x00ddefc0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00ddefd0 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ - 0x00ddefe0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00ddeff0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00ddf000 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ - 0x00ddf010 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ - 0x00ddf020 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ - 0x00ddf030 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00ddf040 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ - 0x00ddf050 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ - 0x00ddf060 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00ddf070 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ - 0x00ddf080 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00ddf090 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00ddf0a0 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ - 0x00ddf0b0 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ - 0x00ddf0c0 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ - 0x00ddf0d0 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ - 0x00ddf0e0 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ - 0x00ddf0f0 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ - 0x00ddf100 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00ddf110 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00ddf120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddf130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddf140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddf150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddf160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddf170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddf180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddf190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddf1a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddf1b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddf1c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddf1d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddf1e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddf1f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddf200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddf210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddf220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddf230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddf240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddf250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddf260 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddf270 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00ddf280 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ - 0x00ddf290 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00ddf2a0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00ddf2b0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ - 0x00ddf2c0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00ddf2d0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00ddf2e0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00ddf2f0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00ddf300 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00ddf310 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00ddf320 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00ddf330 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00ddf340 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00ddf350 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ddf360 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00ddf370 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00ddf380 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00ddf390 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00ddf3a0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00ddf3b0 200a2020 756e6966 6f726d20 73616d70 . uniform samp │ │ │ │ - 0x00ddf3c0 6c657232 4420755f 636f6c6f 72546578 ler2D u_colorTex │ │ │ │ - 0x00ddf3d0 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ - 0x00ddf3e0 706c6572 32442075 5f6d6173 6b546578 pler2D u_maskTex │ │ │ │ - 0x00ddf3f0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00ddf400 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00ddf410 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00ddf420 4c4f575f 50207665 6333204d 6f64756c LOW_P vec3 Modul │ │ │ │ - 0x00ddf430 61746542 79506174 7465726e 446f7473 ateByPatternDots │ │ │ │ - 0x00ddf440 284c4f57 5f502076 65633320 636f6c6f (LOW_P vec3 colo │ │ │ │ - 0x00ddf450 722c2066 6c6f6174 20646172 6b656e2c r, float darken, │ │ │ │ - 0x00ddf460 20666c6f 61742063 6f766572 61676529 float coverage) │ │ │ │ - 0x00ddf470 200a2020 7b200a20 20202063 6f6e7374 . { . const │ │ │ │ - 0x00ddf480 20666c6f 6174206b 4c696768 74656e20 float kLighten │ │ │ │ - 0x00ddf490 3d20302e 3037353b 200a2020 20206966 = 0.075; . if │ │ │ │ - 0x00ddf4a0 2028646f 7428636f 6c6f722c 20766563 (dot(color, vec │ │ │ │ - 0x00ddf4b0 3328302e 32313236 2c20302e 37313532 3(0.2126, 0.7152 │ │ │ │ - 0x00ddf4c0 2c20302e 30373232 2929203c 20302e35 , 0.0722)) < 0.5 │ │ │ │ - 0x00ddf4d0 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00ddf4e0 636f6c6f 72202b20 636f7665 72616765 color + coverage │ │ │ │ - 0x00ddf4f0 202a206b 4c696768 74656e3b 200a2020 * kLighten; . │ │ │ │ - 0x00ddf500 20207265 7475726e 20636f6c 6f72202a return color * │ │ │ │ - 0x00ddf510 206d6978 28312e30 2c206461 726b656e mix(1.0, darken │ │ │ │ - 0x00ddf520 2c20636f 76657261 6765293b 200a2020 , coverage); . │ │ │ │ - 0x00ddf530 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00ddf540 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00ddf550 636f6c6f 72203d20 74657874 75726528 color = texture( │ │ │ │ - 0x00ddf560 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ - 0x00ddf570 6c6f7254 6578436f 6f726429 3b200a20 lorTexCoord); . │ │ │ │ - 0x00ddf580 20202066 6c6f6174 206d6173 6b203d20 float mask = │ │ │ │ - 0x00ddf590 74657874 75726528 755f6d61 736b5465 texture(u_maskTe │ │ │ │ - 0x00ddf5a0 782c2076 5f6d6173 6b546578 436f6f72 x, v_maskTexCoor │ │ │ │ - 0x00ddf5b0 64292e72 3b200a20 20202063 6f6c6f72 d).r; . color │ │ │ │ - 0x00ddf5c0 2e61203d 20636f6c 6f722e61 202a206d .a = color.a * m │ │ │ │ - 0x00ddf5d0 61736b20 2a20755f 6f706163 6974793b ask * u_opacity; │ │ │ │ - 0x00ddf5e0 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ - 0x00ddf5f0 72203d20 636f6c6f 723b200a 20207d20 r = color; . } │ │ │ │ - 0x00ddf600 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00ddf610 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00ddf620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ddf630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ddf640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ddf650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ddf660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ddf670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ddf680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ddf690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ddf6a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ddf6b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ddf6c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ddf6d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ddf6e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ddf6f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ddf700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ddf710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ddf720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ddf730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ddf740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ddf750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ddf760 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ddf770 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00ddf780 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00ddf790 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00ddf7a0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00ddf7b0 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ - 0x00ddf7c0 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ - 0x00ddf7d0 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00ddf7e0 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ - 0x00ddf7f0 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ - 0x00ddf800 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ - 0x00ddf810 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00ddf820 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00ddf830 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00ddf840 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00ddf850 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00ddf860 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00ddf870 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ - 0x00ddf880 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ddf890 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00ddf8a0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00ddf8b0 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ - 0x00ddf8c0 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ - 0x00ddf8d0 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ - 0x00ddf8e0 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ - 0x00ddf8f0 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ - 0x00ddf900 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00ddf910 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00ddf920 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ - 0x00ddf930 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00ddf940 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00ddf950 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00ddf960 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00ddf970 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ - 0x00ddf980 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00ddf990 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ - 0x00ddf9a0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00ddbb80 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ + 0x00ddbb90 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ + 0x00ddbba0 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ + 0x00ddbbb0 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ + 0x00ddbbc0 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ + 0x00ddbbd0 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ + 0x00ddbbe0 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ + 0x00ddbbf0 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ + 0x00ddbc00 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00ddbc10 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ + 0x00ddbc20 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ + 0x00ddbc30 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ + 0x00ddbc40 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00ddbc50 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ + 0x00ddbc60 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00ddbc70 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00ddbc80 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00ddbc90 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ + 0x00ddbca0 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ + 0x00ddbcb0 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ + 0x00ddbcc0 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ + 0x00ddbcd0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00ddbce0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ddbcf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ddbd00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ddbd10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddbd20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddbd30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddbd40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddbd50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddbd60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddbd70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddbd80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddbd90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddbda0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddbdb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddbdc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddbdd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddbde0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddbdf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddbe00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddbe10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddbe20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddbe30 63342076 5f726164 6975733b 200a2020 c4 v_radius; . │ │ │ │ + 0x00ddbe40 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00ddbe50 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00ddbe60 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00ddbe70 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00ddbe80 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00ddbe90 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00ddbea0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00ddbeb0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00ddbec0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00ddbed0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00ddbee0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00ddbef0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00ddbf00 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00ddbf10 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00ddbf20 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00ddbf30 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00ddbf40 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00ddbf50 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00ddbf60 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00ddbf70 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00ddbf80 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00ddbf90 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00ddbfa0 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00ddbfb0 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00ddbfc0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00ddbfd0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00ddbfe0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00ddbff0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00ddc000 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00ddc010 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00ddc020 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00ddc030 67506978 656c7343 6f756e74 203d2032 gPixelsCount = 2 │ │ │ │ + 0x00ddc040 2e353b20 0a202063 6f6e7374 20666c6f .5; . const flo │ │ │ │ + 0x00ddc050 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00ddc060 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00ddc070 20204c4f 575f5020 76656333 204d6f64 LOW_P vec3 Mod │ │ │ │ + 0x00ddc080 756c6174 65427950 61747465 726e446f ulateByPatternDo │ │ │ │ + 0x00ddc090 7473284c 4f575f50 20766563 3320636f ts(LOW_P vec3 co │ │ │ │ + 0x00ddc0a0 6c6f722c 20666c6f 61742064 61726b65 lor, float darke │ │ │ │ + 0x00ddc0b0 6e2c2066 6c6f6174 20636f76 65726167 n, float coverag │ │ │ │ + 0x00ddc0c0 6529200a 20207b20 0a202020 20636f6e e) . { . con │ │ │ │ + 0x00ddc0d0 73742066 6c6f6174 206b4c69 67687465 st float kLighte │ │ │ │ + 0x00ddc0e0 6e203d20 302e3037 353b200a 20202020 n = 0.075; . │ │ │ │ + 0x00ddc0f0 69662028 646f7428 636f6c6f 722c2076 if (dot(color, v │ │ │ │ + 0x00ddc100 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00ddc110 35322c20 302e3037 32322929 203c2030 52, 0.0722)) < 0 │ │ │ │ + 0x00ddc120 2e352920 0a202020 20202072 65747572 .5) . retur │ │ │ │ + 0x00ddc130 6e20636f 6c6f7220 2b20636f 76657261 n color + covera │ │ │ │ + 0x00ddc140 6765202a 206b4c69 67687465 6e3b200a ge * kLighten; . │ │ │ │ + 0x00ddc150 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00ddc160 202a206d 69782831 2e302c20 6461726b * mix(1.0, dark │ │ │ │ + 0x00ddc170 656e2c20 636f7665 72616765 293b200a en, coverage); . │ │ │ │ + 0x00ddc180 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00ddc190 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00ddc1a0 34206669 6e616c43 6f6c6f72 203d2076 4 finalColor = v │ │ │ │ + 0x00ddc1b0 5f636f6c 6f723b20 0a202020 20666c6f _color; . flo │ │ │ │ + 0x00ddc1c0 61742061 61526164 69757320 3d206d61 at aaRadius = ma │ │ │ │ + 0x00ddc1d0 7828765f 72616469 75732e7a 202d206b x(v_radius.z - k │ │ │ │ + 0x00ddc1e0 416e7469 616c6961 73696e67 50697865 AntialiasingPixe │ │ │ │ + 0x00ddc1f0 6c73436f 756e742c 20302e30 293b200a lsCount, 0.0); . │ │ │ │ + 0x00ddc200 20202020 666c6f61 74207374 65705661 float stepVa │ │ │ │ + 0x00ddc210 6c756520 3d20736d 6f6f7468 73746570 lue = smoothstep │ │ │ │ + 0x00ddc220 28616152 61646975 73202a20 61615261 (aaRadius * aaRa │ │ │ │ + 0x00ddc230 64697573 2c20765f 72616469 75732e7a dius, v_radius.z │ │ │ │ + 0x00ddc240 202a2076 5f726164 6975732e 7a2c200a * v_radius.z, . │ │ │ │ + 0x00ddc250 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00ddc260 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00ddc270 20646f74 28765f72 61646975 732e7879 dot(v_radius.xy │ │ │ │ + 0x00ddc280 2c20765f 72616469 75732e78 7929293b , v_radius.xy)); │ │ │ │ + 0x00ddc290 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00ddc2a0 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ + 0x00ddc2b0 61202a20 755f6f70 61636974 79202a20 a * u_opacity * │ │ │ │ + 0x00ddc2c0 28312e30 202d2073 74657056 616c7565 (1.0 - stepValue │ │ │ │ + 0x00ddc2d0 293b200a 20202020 69662028 66696e61 ); . if (fina │ │ │ │ + 0x00ddc2e0 6c436f6c 6f722e61 203c2030 2e303120 lColor.a < 0.01 │ │ │ │ + 0x00ddc2f0 7c7c2075 5f726f75 74655061 72616d73 || u_routeParams │ │ │ │ + 0x00ddc300 2e79203e 20765f72 61646975 732e7729 .y > v_radius.w) │ │ │ │ + 0x00ddc310 200a2020 20202020 64697363 6172643b . discard; │ │ │ │ + 0x00ddc320 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00ddc330 203d2076 65633428 6d697828 66696e61 = vec4(mix(fina │ │ │ │ + 0x00ddc340 6c436f6c 6f722e72 67622c20 755f6d61 lColor.rgb, u_ma │ │ │ │ + 0x00ddc350 736b436f 6c6f722e 7267622c 20755f6d skColor.rgb, u_m │ │ │ │ + 0x00ddc360 61736b43 6f6c6f72 2e61292c 2066696e askColor.a), fin │ │ │ │ + 0x00ddc370 616c436f 6c6f722e 61293b20 0a202020 alColor.a); . │ │ │ │ + 0x00ddc380 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ + 0x00ddc390 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ + 0x00ddc3a0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00ddc3b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00ddc3c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ddc3d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ddc3e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ddc3f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddc400 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddc410 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddc420 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddc430 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddc440 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddc450 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddc460 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddc470 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddc480 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddc490 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddc4a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddc4b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddc4c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddc4d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddc4e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddc4f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddc500 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00ddc510 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00ddc520 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00ddc530 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00ddc540 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00ddc550 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00ddc560 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00ddc570 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00ddc580 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00ddc590 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00ddc5a0 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00ddc5b0 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00ddc5c0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00ddc5d0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00ddc5e0 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ + 0x00ddc5f0 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ + 0x00ddc600 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ + 0x00ddc610 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ + 0x00ddc620 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ + 0x00ddc630 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ + 0x00ddc640 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ + 0x00ddc650 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ + 0x00ddc660 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ + 0x00ddc670 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ + 0x00ddc680 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ + 0x00ddc690 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ + 0x00ddc6a0 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ + 0x00ddc6b0 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ + 0x00ddc6c0 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ + 0x00ddc6d0 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ + 0x00ddc6e0 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ + 0x00ddc6f0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00ddc700 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00ddc710 765f4672 6167436f 6c6f7220 3d207665 v_FragColor = ve │ │ │ │ + 0x00ddc720 63342875 5f636f6c 6f722e72 67622c20 c4(u_color.rgb, │ │ │ │ + 0x00ddc730 755f636f 6c6f722e 61202a20 736d6f6f u_color.a * smoo │ │ │ │ + 0x00ddc740 74687374 65702830 2e372c20 312e302c thstep(0.7, 1.0, │ │ │ │ + 0x00ddc750 20765f69 6e74656e 73697479 29293b20 v_intensity)); │ │ │ │ + 0x00ddc760 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00ddc770 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00ddc780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ddc790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ddc7a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ddc7b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddc7c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddc7d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddc7e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddc7f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddc800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddc810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddc820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddc830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddc840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddc850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddc860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddc870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddc880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddc890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddc8a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddc8b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddc8c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddc8d0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00ddc8e0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00ddc8f0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00ddc900 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00ddc910 73742066 6c6f6174 20616150 6978656c st float aaPixel │ │ │ │ + 0x00ddc920 73436f75 6e74203d 20322e35 3b200a20 sCount = 2.5; . │ │ │ │ + 0x00ddc930 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00ddc940 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00ddc950 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ + 0x00ddc960 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ + 0x00ddc970 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ + 0x00ddc980 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ + 0x00ddc990 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ + 0x00ddc9a0 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ + 0x00ddc9b0 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ + 0x00ddc9c0 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ + 0x00ddc9d0 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ + 0x00ddc9e0 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ + 0x00ddc9f0 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ + 0x00ddca00 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ + 0x00ddca10 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ + 0x00ddca20 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ + 0x00ddca30 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ + 0x00ddca40 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ + 0x00ddca50 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ + 0x00ddca60 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ + 0x00ddca70 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00ddca80 7b200a20 20202076 65633420 66696e61 { . vec4 fina │ │ │ │ + 0x00ddca90 6c436f6c 6f72203d 20765f63 6f6c6f72 lColor = v_color │ │ │ │ + 0x00ddcaa0 3b200a20 20202066 6c6f6174 20736d61 ; . float sma │ │ │ │ + 0x00ddcab0 6c6c5261 64697573 203d2076 5f726164 llRadius = v_rad │ │ │ │ + 0x00ddcac0 6975732e 7a202d20 61615069 78656c73 ius.z - aaPixels │ │ │ │ + 0x00ddcad0 436f756e 743b200a 20202020 666c6f61 Count; . floa │ │ │ │ + 0x00ddcae0 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ + 0x00ddcaf0 6f6f7468 73746570 28736d61 6c6c5261 oothstep(smallRa │ │ │ │ + 0x00ddcb00 64697573 202a2073 6d616c6c 52616469 dius * smallRadi │ │ │ │ + 0x00ddcb10 75732c20 765f7261 64697573 2e7a202a us, v_radius.z * │ │ │ │ + 0x00ddcb20 20765f72 61646975 732e7a2c 200a2020 v_radius.z, . │ │ │ │ + 0x00ddcb30 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00ddcb40 20202020 20202020 20202020 2020646f do │ │ │ │ + 0x00ddcb50 7428765f 72616469 75732e78 792c2076 t(v_radius.xy, v │ │ │ │ + 0x00ddcb60 5f726164 6975732e 78792929 3b200a20 _radius.xy)); . │ │ │ │ + 0x00ddcb70 20202066 696e616c 436f6c6f 722e6120 finalColor.a │ │ │ │ + 0x00ddcb80 3d206669 6e616c43 6f6c6f72 2e61202a = finalColor.a * │ │ │ │ + 0x00ddcb90 2028312e 30202d20 73746570 56616c75 (1.0 - stepValu │ │ │ │ + 0x00ddcba0 65293b20 0a202020 20696620 2866696e e); . if (fin │ │ │ │ + 0x00ddcbb0 616c436f 6c6f722e 61203c20 302e3031 alColor.a < 0.01 │ │ │ │ + 0x00ddcbc0 29200a20 20202020 20646973 63617264 ) . discard │ │ │ │ + 0x00ddcbd0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00ddcbe0 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ + 0x00ddcbf0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00ddcc00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ddcc10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ddcc20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ddcc30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddcc40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddcc50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddcc60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddcc70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddcc80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddcc90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddcca0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddccb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddccc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddccd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddcce0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddccf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddcd00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddcd10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddcd20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddcd30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddcd40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddcd50 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00ddcd60 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00ddcd70 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00ddcd80 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00ddcd90 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00ddcda0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00ddcdb0 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00ddcdc0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00ddcdd0 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00ddcde0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00ddcdf0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00ddce00 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00ddce10 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00ddce20 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00ddce30 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00ddce40 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ddce50 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00ddce60 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00ddce70 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00ddce80 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00ddce90 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00ddcea0 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00ddceb0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00ddcec0 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00ddced0 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00ddcee0 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00ddcef0 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00ddcf00 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00ddcf10 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ddcf20 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00ddcf30 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00ddcf40 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00ddcf50 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00ddcf60 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00ddcf70 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00ddcf80 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00ddcf90 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00ddcfa0 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00ddcfb0 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00ddcfc0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00ddcfd0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00ddcfe0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00ddcff0 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00ddd000 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00ddd010 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00ddd020 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00ddd030 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00ddd040 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00ddd050 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00ddd060 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00ddd070 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00ddd080 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00ddd090 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00ddd0a0 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00ddd0b0 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00ddd0c0 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00ddd0d0 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00ddd0e0 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00ddd0f0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00ddd100 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00ddd110 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00ddd120 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00ddd130 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00ddd140 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00ddd150 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00ddd160 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00ddd170 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00ddd180 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00ddd190 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00ddd1a0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00ddd1b0 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00ddd1c0 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00ddd1d0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00ddd1e0 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00ddd1f0 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00ddd200 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00ddd210 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00ddd220 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00ddd230 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00ddd240 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00ddd250 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00ddd260 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00ddd270 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00ddd280 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00ddd290 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00ddd2a0 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00ddd2b0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00ddd2c0 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00ddd2d0 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00ddd2e0 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00ddd2f0 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00ddd300 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00ddd310 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00ddd320 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00ddd330 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00ddd340 203d2061 5f74636f 6f72643b 200a2020 = a_tcoord; . │ │ │ │ + 0x00ddd350 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00ddd360 76656334 28615f70 6f732c20 302e302c vec4(a_pos, 0.0, │ │ │ │ + 0x00ddd370 20312e30 293b200a 20207d20 0a000000 1.0); . } .... │ │ │ │ + 0x00ddd380 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ddd390 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ddd3a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ddd3b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddd3c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddd3d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddd3e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddd3f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddd400 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddd410 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddd420 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddd430 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddd440 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddd450 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddd460 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddd470 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddd480 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddd490 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddd4a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddd4b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddd4c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddd4d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00ddd4e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00ddd4f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00ddd500 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00ddd510 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ + 0x00ddd520 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ + 0x00ddd530 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00ddd540 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ + 0x00ddd550 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ + 0x00ddd560 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ + 0x00ddd570 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00ddd580 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00ddd590 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00ddd5a0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00ddd5b0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00ddd5c0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00ddd5d0 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00ddd5e0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00ddd5f0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00ddd600 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00ddd610 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ + 0x00ddd620 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ + 0x00ddd630 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ + 0x00ddd640 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ + 0x00ddd650 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ + 0x00ddd660 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00ddd670 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00ddd680 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00ddd690 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00ddd6a0 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00ddd6b0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00ddd6c0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00ddd6d0 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00ddd6e0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00ddd6f0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00ddd700 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00ddd710 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ddd720 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00ddd730 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00ddd740 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00ddd750 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00ddd760 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00ddd770 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00ddd780 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00ddd790 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00ddd7a0 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00ddd7b0 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00ddd7c0 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00ddd7d0 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00ddd7e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ddd7f0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00ddd800 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00ddd810 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00ddd820 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00ddd830 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00ddd840 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00ddd850 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00ddd860 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00ddd870 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00ddd880 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00ddd890 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00ddd8a0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00ddd8b0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00ddd8c0 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00ddd8d0 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00ddd8e0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00ddd8f0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00ddd900 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00ddd910 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00ddd920 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00ddd930 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00ddd940 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00ddd950 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00ddd960 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00ddd970 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00ddd980 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00ddd990 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00ddd9a0 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00ddd9b0 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00ddd9c0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00ddd9d0 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00ddd9e0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00ddd9f0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00ddda00 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00ddda10 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00ddda20 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00ddda30 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00ddda40 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00ddda50 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00ddda60 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00ddda70 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00ddda80 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00ddda90 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00dddaa0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00dddab0 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00dddac0 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00dddad0 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00dddae0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00dddaf0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00dddb00 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00dddb10 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00dddb20 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00dddb30 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00dddb40 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00dddb50 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00dddb60 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00dddb70 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00dddb80 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00dddb90 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00dddba0 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00dddbb0 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00dddbc0 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00dddbd0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00dddbe0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00dddbf0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00dddc00 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ + 0x00dddc10 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ + 0x00dddc20 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ + 0x00dddc30 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ + 0x00dddc40 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00dddc50 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00dddc60 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00dddc70 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00dddc80 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00dddc90 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ + 0x00dddca0 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ + 0x00dddcb0 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ + 0x00dddcc0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00dddcd0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00dddce0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00dddcf0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00dddd00 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00dddd10 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ + 0x00dddd20 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dddd30 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dddd40 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00dddd50 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ + 0x00dddd60 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ + 0x00dddd70 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ + 0x00dddd80 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ + 0x00dddd90 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ + 0x00dddda0 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ + 0x00ddddb0 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ + 0x00ddddc0 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ + 0x00ddddd0 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ + 0x00dddde0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00ddddf0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00ddde00 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ + 0x00ddde10 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ + 0x00ddde20 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ + 0x00ddde30 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ + 0x00ddde40 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ + 0x00ddde50 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ + 0x00ddde60 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00ddde70 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00ddde80 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00ddde90 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00dddea0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00dddeb0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00dddec0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00ddded0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00dddee0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00dddef0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00dddf00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dddf10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dddf20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dddf30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dddf40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dddf50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dddf60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dddf70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dddf80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dddf90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dddfa0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dddfb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dddfc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dddfd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dddfe0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dddff0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dde000 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dde010 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dde020 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dde030 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dde040 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dde050 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00dde060 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00dde070 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00dde080 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00dde090 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00dde0a0 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00dde0b0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00dde0c0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00dde0d0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00dde0e0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00dde0f0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00dde100 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00dde110 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00dde120 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00dde130 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00dde140 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00dde150 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00dde160 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00dde170 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00dde180 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00dde190 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00dde1a0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00dde1b0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00dde1c0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00dde1d0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00dde1e0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00dde1f0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00dde200 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00dde210 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00dde220 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00dde230 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00dde240 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00dde250 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00dde260 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00dde270 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00dde280 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00dde290 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00dde2a0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00dde2b0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00dde2c0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00dde2d0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00dde2e0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00dde2f0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00dde300 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00dde310 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00dde320 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00dde330 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00dde340 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00dde350 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00dde360 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00dde370 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00dde380 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dde390 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00dde3a0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00dde3b0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00dde3c0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00dde3d0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00dde3e0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00dde3f0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00dde400 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00dde410 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00dde420 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00dde430 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00dde440 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00dde450 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00dde460 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00dde470 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00dde480 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00dde490 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00dde4a0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00dde4b0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00dde4c0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00dde4d0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00dde4e0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00dde4f0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00dde500 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00dde510 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00dde520 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00dde530 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00dde540 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00dde550 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00dde560 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00dde570 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00dde580 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00dde590 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00dde5a0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00dde5b0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00dde5c0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00dde5d0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00dde5e0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00dde5f0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00dde600 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00dde610 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00dde620 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00dde630 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00dde640 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00dde650 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00dde660 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00dde670 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00dde680 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00dde690 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00dde6a0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00dde6b0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00dde6c0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00dde6d0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00dde6e0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00dde6f0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00dde700 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00dde710 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00dde720 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00dde730 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00dde740 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00dde750 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00dde760 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00dde770 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00dde780 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00dde790 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00dde7a0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00dde7b0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00dde7c0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00dde7d0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00dde7e0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00dde7f0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00dde800 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00dde810 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00dde820 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00dde830 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00dde840 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00dde850 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00dde860 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00dde870 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00dde880 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00dde890 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00dde8a0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00dde8b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dde8c0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dde8d0 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00dde8e0 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00dde8f0 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00dde900 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00dde910 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00dde920 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00dde930 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00dde940 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ + 0x00dde950 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ + 0x00dde960 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ + 0x00dde970 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00dde980 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00dde990 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00dde9a0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00dde9b0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00dde9c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dde9d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dde9e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dde9f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddea00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddea10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddea20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddea30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddea40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddea50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddea60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddea70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddea80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddea90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddeaa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddeab0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddeac0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddead0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddeae0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddeaf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddeb00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddeb10 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00ddeb20 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00ddeb30 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ + 0x00ddeb40 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ + 0x00ddeb50 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00ddeb60 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ + 0x00ddeb70 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ + 0x00ddeb80 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00ddeb90 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00ddeba0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00ddebb0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00ddebc0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00ddebd0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00ddebe0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00ddebf0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00ddec00 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00ddec10 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00ddec20 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00ddec30 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00ddec40 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00ddec50 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00ddec60 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00ddec70 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00ddec80 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00ddec90 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00ddeca0 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00ddecb0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00ddecc0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00ddecd0 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ + 0x00ddece0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00ddecf0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00dded00 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00dded10 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ + 0x00dded20 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ + 0x00dded30 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ + 0x00dded40 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ + 0x00dded50 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00dded60 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00dded70 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00dded80 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00dded90 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00ddeda0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00ddedb0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00ddedc0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00ddedd0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00ddede0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00ddedf0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00ddee00 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00ddee10 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00ddee20 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00ddee30 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00ddee40 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00ddee50 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00ddee60 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00ddee70 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00ddee80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00ddee90 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00ddeea0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00ddeeb0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ddeec0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00ddeed0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00ddeee0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00ddeef0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00ddef00 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00ddef10 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00ddef20 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00ddef30 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00ddef40 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00ddef50 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00ddef60 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00ddef70 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00ddef80 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00ddef90 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00ddefa0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00ddefb0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00ddefc0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00ddefd0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00ddefe0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00ddeff0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00ddf000 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00ddf010 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00ddf020 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00ddf030 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00ddf040 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00ddf050 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00ddf060 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00ddf070 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00ddf080 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00ddf090 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00ddf0a0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00ddf0b0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00ddf0c0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00ddf0d0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00ddf0e0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00ddf0f0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00ddf100 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00ddf110 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00ddf120 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00ddf130 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00ddf140 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00ddf150 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00ddf160 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00ddf170 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00ddf180 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00ddf190 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00ddf1a0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00ddf1b0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00ddf1c0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00ddf1d0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00ddf1e0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00ddf1f0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00ddf200 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00ddf210 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00ddf220 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00ddf230 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00ddf240 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00ddf250 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00ddf260 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00ddf270 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00ddf280 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00ddf290 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00ddf2a0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00ddf2b0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00ddf2c0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00ddf2d0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00ddf2e0 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ + 0x00ddf2f0 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ + 0x00ddf300 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ + 0x00ddf310 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ + 0x00ddf320 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ + 0x00ddf330 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ + 0x00ddf340 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ + 0x00ddf350 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ + 0x00ddf360 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ + 0x00ddf370 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ + 0x00ddf380 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ + 0x00ddf390 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ + 0x00ddf3a0 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ + 0x00ddf3b0 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ + 0x00ddf3c0 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ + 0x00ddf3d0 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00ddf3e0 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ + 0x00ddf3f0 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ + 0x00ddf400 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00ddf410 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00ddf420 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00ddf430 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00ddf440 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00ddf450 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00ddf460 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00ddf470 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00ddf480 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ + 0x00ddf490 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ + 0x00ddf4a0 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ + 0x00ddf4b0 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ + 0x00ddf4c0 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ + 0x00ddf4d0 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ + 0x00ddf4e0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00ddf4f0 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ + 0x00ddf500 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ + 0x00ddf510 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ + 0x00ddf520 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ + 0x00ddf530 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ + 0x00ddf540 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00ddf550 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00ddf560 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00ddf570 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00ddf580 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00ddf590 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00ddf5a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ddf5b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ddf5c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ddf5d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ddf5e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ddf5f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ddf600 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ddf610 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ddf620 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ddf630 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ddf640 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ddf650 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ddf660 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ddf670 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ddf680 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ddf690 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ddf6a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ddf6b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ddf6c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ddf6d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ddf6e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ddf6f0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00ddf700 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00ddf710 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00ddf720 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00ddf730 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00ddf740 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00ddf750 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00ddf760 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00ddf770 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00ddf780 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00ddf790 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00ddf7a0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00ddf7b0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00ddf7c0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00ddf7d0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00ddf7e0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00ddf7f0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00ddf800 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00ddf810 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00ddf820 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00ddf830 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00ddf840 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00ddf850 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00ddf860 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00ddf870 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00ddf880 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00ddf890 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00ddf8a0 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00ddf8b0 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00ddf8c0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00ddf8d0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00ddf8e0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00ddf8f0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00ddf900 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00ddf910 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00ddf920 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00ddf930 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00ddf940 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00ddf950 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00ddf960 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00ddf970 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00ddf980 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00ddf990 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00ddf9a0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ 0x00ddf9b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00ddf9c0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00ddf9d0 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ - 0x00ddf9e0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00ddf9f0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00ddfa00 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ - 0x00ddfa10 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ - 0x00ddfa20 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00ddfa30 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ - 0x00ddfa40 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ - 0x00ddfa50 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ - 0x00ddfa60 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ - 0x00ddfa70 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ - 0x00ddfa80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00ddfa90 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ - 0x00ddfaa0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ - 0x00ddfab0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00ddfac0 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ - 0x00ddfad0 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ - 0x00ddfae0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00ddfaf0 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ - 0x00ddfb00 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ - 0x00ddfb10 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ - 0x00ddfb20 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ - 0x00ddfb30 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00ddfb40 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00ddfb50 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00ddfb60 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ - 0x00ddfb70 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ - 0x00ddfb80 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ - 0x00ddfb90 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ - 0x00ddfba0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00ddfbb0 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ - 0x00ddfbc0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00ddfbd0 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ - 0x00ddfbe0 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ - 0x00ddfbf0 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ - 0x00ddfc00 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ - 0x00ddfc10 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ - 0x00ddfc20 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ - 0x00ddfc30 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ - 0x00ddfc40 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ - 0x00ddfc50 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ - 0x00ddfc60 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00ddfc70 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ - 0x00ddfc80 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ - 0x00ddfc90 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ - 0x00ddfca0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00ddfcb0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00ddfcc0 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ - 0x00ddfcd0 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ - 0x00ddfce0 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ - 0x00ddfcf0 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ - 0x00ddfd00 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ - 0x00ddfd10 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00ddfd20 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ - 0x00ddfd30 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ - 0x00ddfd40 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00ddfd50 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ - 0x00ddfd60 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ - 0x00ddfd70 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ - 0x00ddfd80 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ - 0x00ddfd90 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ - 0x00ddfda0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00ddfdb0 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ - 0x00ddfdc0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00ddfdd0 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ - 0x00ddfde0 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ - 0x00ddfdf0 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ - 0x00ddfe00 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ - 0x00ddfe10 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ - 0x00ddfe20 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00ddfe30 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ - 0x00ddfe40 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ - 0x00ddfe50 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ - 0x00ddfe60 7365200a 20202020 20207265 7475726e se . return │ │ │ │ - 0x00ddfe70 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00ddfe80 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00ddfe90 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00ddfea0 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ - 0x00ddfeb0 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ - 0x00ddfec0 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ - 0x00ddfed0 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ - 0x00ddfee0 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00ddfef0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00ddff00 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00ddff10 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00ddff20 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00ddff30 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ - 0x00ddff40 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ - 0x00ddff50 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ - 0x00ddff60 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00ddff70 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00ddff80 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00ddff90 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00ddffa0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00ddffb0 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ - 0x00ddffc0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00ddffd0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00ddffe0 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00ddfff0 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ - 0x00de0000 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ - 0x00de0010 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ - 0x00de0020 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ - 0x00de0030 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ - 0x00de0040 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ - 0x00de0050 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ - 0x00de0060 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ - 0x00de0070 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ - 0x00de0080 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00de0090 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00de00a0 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ - 0x00de00b0 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ - 0x00de00c0 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ - 0x00de00d0 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ - 0x00de00e0 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ - 0x00de00f0 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ - 0x00de0100 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00de0110 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00de0120 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00de0130 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00de0140 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00de0150 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00de0160 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00de0170 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00de0180 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00de0190 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00de01a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de01b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de01c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de01d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de01e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de01f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de0200 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de0210 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de0220 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de0230 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de0240 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de0250 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de0260 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de0270 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de0280 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de0290 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de02a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de02b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de02c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de02d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de02e0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ - 0x00de02f0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00de0300 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00de0310 20755f63 6f6c6f72 3b200a20 20636f6e u_color; . con │ │ │ │ - 0x00de0320 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00de0330 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00de0340 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ - 0x00de0350 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ - 0x00de0360 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ - 0x00de0370 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ - 0x00de0380 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ - 0x00de0390 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ - 0x00de03a0 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ - 0x00de03b0 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ - 0x00de03c0 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ - 0x00de03d0 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ - 0x00de03e0 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ - 0x00de03f0 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ - 0x00de0400 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ - 0x00de0410 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ - 0x00de0420 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ - 0x00de0430 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ - 0x00de0440 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ - 0x00de0450 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ - 0x00de0460 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00de0470 20202076 5f467261 67436f6c 6f72203d v_FragColor = │ │ │ │ - 0x00de0480 20755f63 6f6c6f72 3b200a20 207d200a u_color; . } . │ │ │ │ - 0x00de0490 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de04a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de04b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de04c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de04d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de04e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de04f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de0500 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de0510 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de0520 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de0530 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de0540 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de0550 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de0560 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de0570 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de0580 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de0590 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de05a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de05b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de05c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de05d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de05e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de05f0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00de0600 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00de0610 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00de0620 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00de0630 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00de0640 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00de0650 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00de0660 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00de0670 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00de0680 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00de0690 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00de06a0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00de06b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de06c0 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00de06d0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00de06e0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00de06f0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00de0700 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00de0710 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00de0720 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00de0730 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00de0740 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00de0750 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00de0760 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00de0770 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00de0780 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00de0790 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00de07a0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00de07b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de07c0 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00de07d0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00de07e0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00de07f0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00de0800 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00de0810 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00de0820 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00de0830 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00de0840 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00de0850 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00de0860 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00de0870 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00de0880 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00de0890 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00de08a0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00de08b0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00de08c0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00de08d0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00de08e0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00de08f0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00de0900 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00de0910 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00de0920 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00de0930 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00de0940 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00de0950 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00de0960 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de0970 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00de0980 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00de0990 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00de09a0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00de09b0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00de09c0 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00de09d0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00de09e0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00de09f0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00de0a00 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00de0a10 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00de0a20 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00de0a30 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00de0a40 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00de0a50 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00de0a60 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00de0a70 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00de0a80 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00de0a90 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00de0aa0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00de0ab0 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00de0ac0 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00de0ad0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00de0ae0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00de0af0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00de0b00 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00de0b10 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00de0b20 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00de0b30 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00de0b40 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00de0b50 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00de0b60 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00de0b70 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00de0b80 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00de0b90 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00de0ba0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00de0bb0 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ - 0x00de0bc0 20302c20 31293b20 0a202023 69666465 0, 1); . #ifde │ │ │ │ - 0x00de0bd0 66205655 4c4b414e 200a2020 2020676c f VULKAN . gl │ │ │ │ - 0x00de0be0 5f506f73 6974696f 6e2e7920 3d202d67 _Position.y = -g │ │ │ │ - 0x00de0bf0 6c5f506f 73697469 6f6e2e79 3b200a20 l_Position.y; . │ │ │ │ - 0x00de0c00 20202067 6c5f506f 73697469 6f6e2e7a gl_Position.z │ │ │ │ - 0x00de0c10 203d2028 676c5f50 6f736974 696f6e2e = (gl_Position. │ │ │ │ - 0x00de0c20 7a20202b 20676c5f 506f7369 74696f6e z + gl_Position │ │ │ │ - 0x00de0c30 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ - 0x00de0c40 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ - 0x00de0c50 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de0c60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de0c70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de0c80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de0c90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de0ca0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de0cb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de0cc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de0cd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de0ce0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de0cf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de0d00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de0d10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de0d20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de0d30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de0d40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de0d50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de0d60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de0d70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de0d80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de0d90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de0da0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00de0db0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00de0dc0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00de0dd0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00de0de0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00de0df0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00de0e00 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00de0e10 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00de0e20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de0e30 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00de0e40 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00de0e50 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00de0e60 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00de0e70 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00de0e80 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00de0e90 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00de0ea0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00de0eb0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00de0ec0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00de0ed0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00de0ee0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00de0ef0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00de0f00 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00de0f10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00de0f20 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00de0f30 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00de0f40 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00de0f50 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00de0f60 6c6f6174 206b5065 72696f64 5078203d loat kPeriodPx = │ │ │ │ - 0x00de0f70 20382e30 3b202020 20202f2f 20646973 8.0; // dis │ │ │ │ - 0x00de0f80 74616e63 65206265 74776565 6e206469 tance between di │ │ │ │ - 0x00de0f90 61676f6e 616c206c 696e6573 2c20696e agonal lines, in │ │ │ │ - 0x00de0fa0 20276261 73652720 70697865 6c73200a 'base' pixels . │ │ │ │ - 0x00de0fb0 2020636f 6e737420 666c6f61 74206b48 const float kH │ │ │ │ - 0x00de0fc0 616c6657 69647468 5078203d 20302e37 alfWidthPx = 0.7 │ │ │ │ - 0x00de0fd0 3b20202f 2f206861 6c66206c 696e6520 ; // half line │ │ │ │ - 0x00de0fe0 77696474 6820616c 6f6e6720 74686520 width along the │ │ │ │ - 0x00de0ff0 782b7920 61786973 20287e31 70782070 x+y axis (~1px p │ │ │ │ - 0x00de1000 65727065 6e646963 756c6172 29200a20 erpendicular) . │ │ │ │ - 0x00de1010 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00de1020 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00de1030 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ - 0x00de1040 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ - 0x00de1050 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ - 0x00de1060 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ - 0x00de1070 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ - 0x00de1080 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ - 0x00de1090 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ - 0x00de10a0 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ - 0x00de10b0 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ - 0x00de10c0 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ - 0x00de10d0 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ - 0x00de10e0 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ - 0x00de10f0 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ - 0x00de1100 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ - 0x00de1110 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ - 0x00de1120 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ - 0x00de1130 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ - 0x00de1140 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ - 0x00de1150 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00de1160 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ - 0x00de1170 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ - 0x00de1180 50207665 63342063 6f6c6f72 203d2076 P vec4 color = v │ │ │ │ - 0x00de1190 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ - 0x00de11a0 200a2020 20204c4f 575f5020 76656334 . LOW_P vec4 │ │ │ │ - 0x00de11b0 20636f6c 6f72203d 20746578 74757265 color = texture │ │ │ │ - 0x00de11c0 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ - 0x00de11d0 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ - 0x00de11e0 0a202023 656e6469 66200a20 20202076 . #endif . v │ │ │ │ - 0x00de11f0 65633220 7078203d 20765f6d 61736b54 ec2 px = v_maskT │ │ │ │ - 0x00de1200 6578436f 6f726473 202a2031 362e303b exCoords * 16.0; │ │ │ │ - 0x00de1210 200a2020 2020666c 6f617420 64696167 . float diag │ │ │ │ - 0x00de1220 203d2070 782e7820 2b207078 2e793b20 = px.x + px.y; │ │ │ │ - 0x00de1230 0a202020 20666c6f 6174206d 203d206d . float m = m │ │ │ │ - 0x00de1240 6f642864 6961672c 206b5065 72696f64 od(diag, kPeriod │ │ │ │ - 0x00de1250 5078293b 200a2020 2020666c 6f617420 Px); . float │ │ │ │ - 0x00de1260 64697374 203d206d 696e286d 2c206b50 dist = min(m, kP │ │ │ │ - 0x00de1270 6572696f 64507820 2d206d29 3b202020 eriodPx - m); │ │ │ │ - 0x00de1280 20202020 20202020 20202020 2f2f2064 // d │ │ │ │ - 0x00de1290 69737461 6e636520 746f2074 6865206e istance to the n │ │ │ │ - 0x00de12a0 65617265 7374206c 696e6520 63656e74 earest line cent │ │ │ │ - 0x00de12b0 6572200a 20202020 666c6f61 74206161 er . float aa │ │ │ │ - 0x00de12c0 203d2066 77696474 68286469 6167293b = fwidth(diag); │ │ │ │ - 0x00de12d0 200a2020 2020666c 6f617420 636f7665 . float cove │ │ │ │ - 0x00de12e0 72616765 203d2031 2e30202d 20736d6f rage = 1.0 - smo │ │ │ │ - 0x00de12f0 6f746873 74657028 6b48616c 66576964 othstep(kHalfWid │ │ │ │ - 0x00de1300 74685078 202d2061 612c206b 48616c66 thPx - aa, kHalf │ │ │ │ - 0x00de1310 57696474 68507820 2b206161 2c206469 WidthPx + aa, di │ │ │ │ - 0x00de1320 7374293b 200a2020 2020636f 6c6f722e st); . color. │ │ │ │ - 0x00de1330 61202a3d 20636f76 65726167 65202a20 a *= coverage * │ │ │ │ - 0x00de1340 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ - 0x00de1350 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ - 0x00de1360 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00de1370 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de1380 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de1390 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de13a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de13b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de13c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de13d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de13e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de13f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de1400 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de1410 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de1420 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de1430 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de1440 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de1450 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de1460 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de1470 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de1480 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de1490 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de14a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de14b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de14c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de14d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00de14e0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00de14f0 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ - 0x00de1500 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ - 0x00de1510 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ - 0x00de1520 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00de1530 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ - 0x00de1540 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ - 0x00de1550 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00de1560 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00de1570 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ - 0x00de1580 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ - 0x00de1590 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00de15a0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00de15b0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00de15c0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00de15d0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00de15e0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00de15f0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00de1600 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00de1610 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00de1620 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00de1630 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00de1640 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00de1650 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00de1660 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00de1670 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00de1680 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00de1690 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ - 0x00de16a0 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ - 0x00de16b0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ - 0x00de16c0 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ - 0x00de16d0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00de16e0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00de16f0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00de1700 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00de1710 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00de1720 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00de1730 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00de1740 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00de1750 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00de1760 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00de1770 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00de1780 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de1790 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00de17a0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00de17b0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00de17c0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00de17d0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00de17e0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00de17f0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00de1800 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00de1810 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00de1820 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00de1830 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00de1840 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00de1850 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00de1860 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00de1870 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00de1880 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de1890 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00de18a0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00de18b0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00de18c0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00de18d0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00de18e0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00de18f0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00de1900 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00de1910 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00de1920 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00de1930 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00de1940 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00de1950 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00de1960 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00de1970 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00de1980 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00de1990 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00de19a0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00de19b0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00de19c0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00de19d0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00de19e0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00de19f0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00de1a00 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00de1a10 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00de1a20 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00de1a30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de1a40 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00de1a50 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00de1a60 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00de1a70 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00de1a80 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00de1a90 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00de1aa0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00de1ab0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00de1ac0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00de1ad0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00de1ae0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00de1af0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00de1b00 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00de1b10 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00de1b20 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00de1b30 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00de1b40 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00de1b50 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00de1b60 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00de1b70 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00de1b80 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00de1b90 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00de1ba0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00de1bb0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00de1bc0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00de1bd0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00de1be0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00de1bf0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00de1c00 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00de1c10 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00de1c20 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00de1c30 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00de1c40 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00de1c50 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00de1c60 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00de1c70 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00de1c80 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00de1c90 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ - 0x00de1ca0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00de1cb0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00de1cc0 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ - 0x00de1cd0 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ - 0x00de1ce0 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00de1cf0 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00de1d00 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00de1d10 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00de1d20 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00de1d30 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ - 0x00de1d40 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ - 0x00de1d50 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00de1d60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00de1d70 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00de1d80 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ - 0x00de1d90 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ - 0x00de1da0 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00de1db0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de1dc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de1dd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de1de0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de1df0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de1e00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de1e10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de1e20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de1e30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de1e40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de1e50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de1e60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de1e70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de1e80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de1e90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de1ea0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de1eb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de1ec0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de1ed0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de1ee0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de1ef0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de1f00 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00de1f10 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00de1f20 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00de1f30 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00de1f40 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00de1f50 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00de1f60 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00de1f70 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00de1f80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de1f90 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00de1fa0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00de1fb0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00de1fc0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00de1fd0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00de1fe0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00de1ff0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00de2000 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00de2010 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00de2020 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00de2030 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00de2040 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00de2050 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00de2060 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00de2070 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00de2080 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00de2090 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00de20a0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00de20b0 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00de20c0 6c6f6174 206b526f 77506572 696f6450 loat kRowPeriodP │ │ │ │ - 0x00de20d0 78203d20 382e303b 20202020 2f2f2076 x = 8.0; // v │ │ │ │ - 0x00de20e0 65727469 63616c20 64697374 616e6365 ertical distance │ │ │ │ - 0x00de20f0 20626574 7765656e 20646173 6820726f between dash ro │ │ │ │ - 0x00de2100 7773200a 2020636f 6e737420 666c6f61 ws . const floa │ │ │ │ - 0x00de2110 74206b52 6f774365 6e746572 5078203d t kRowCenterPx = │ │ │ │ - 0x00de2120 20332e35 3b202020 202f2f20 66697273 3.5; // firs │ │ │ │ - 0x00de2130 7420726f 77206365 6e746572 20286d61 t row center (ma │ │ │ │ - 0x00de2140 74636865 73207468 65206c65 67616379 tches the legacy │ │ │ │ - 0x00de2150 2074696c 6529200a 2020636f 6e737420 tile) . const │ │ │ │ - 0x00de2160 666c6f61 74206b48 616c6654 6869636b float kHalfThick │ │ │ │ - 0x00de2170 5078203d 20302e35 3b202020 202f2f20 Px = 0.5; // │ │ │ │ - 0x00de2180 68616c66 20646173 68207468 69636b6e half dash thickn │ │ │ │ - 0x00de2190 65737320 2d3e207e 31707820 0a202063 ess -> ~1px . c │ │ │ │ - 0x00de21a0 6f6e7374 20666c6f 6174206b 44617368 onst float kDash │ │ │ │ - 0x00de21b0 50657269 6f645078 203d2031 362e303b PeriodPx = 16.0; │ │ │ │ - 0x00de21c0 20202f2f 20646173 68202b20 67617020 // dash + gap │ │ │ │ - 0x00de21d0 6c656e67 7468200a 2020636f 6e737420 length . const │ │ │ │ - 0x00de21e0 666c6f61 74206b44 61736848 616c6650 float kDashHalfP │ │ │ │ - 0x00de21f0 78203d20 342e303b 20202020 202f2f20 x = 4.0; // │ │ │ │ - 0x00de2200 68616c66 20646173 68206c65 6e677468 half dash length │ │ │ │ - 0x00de2210 202d3e20 38707820 64617368 200a2020 -> 8px dash . │ │ │ │ - 0x00de2220 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00de2230 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00de2240 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ - 0x00de2250 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ - 0x00de2260 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ - 0x00de2270 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ - 0x00de2280 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ - 0x00de2290 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ - 0x00de22a0 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ - 0x00de22b0 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ - 0x00de22c0 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ - 0x00de22d0 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ - 0x00de22e0 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ - 0x00de22f0 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ - 0x00de2300 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00de2310 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ - 0x00de2320 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ - 0x00de2330 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ - 0x00de2340 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ - 0x00de2350 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ - 0x00de2360 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00de2370 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00de2380 455f5654 46200a20 2020204c 4f575f50 E_VTF . LOW_P │ │ │ │ - 0x00de2390 20766563 3420636f 6c6f7220 3d20765f vec4 color = v_ │ │ │ │ - 0x00de23a0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00de23b0 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ - 0x00de23c0 636f6c6f 72203d20 74657874 75726528 color = texture( │ │ │ │ - 0x00de23d0 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ - 0x00de23e0 6c6f7254 6578436f 6f726473 293b200a lorTexCoords); . │ │ │ │ - 0x00de23f0 20202365 6e646966 200a2020 20207665 #endif . ve │ │ │ │ - 0x00de2400 63322070 78203d20 765f6d61 736b5465 c2 px = v_maskTe │ │ │ │ - 0x00de2410 78436f6f 72647320 2a203136 2e303b20 xCoords * 16.0; │ │ │ │ - 0x00de2420 0a202020 20666c6f 61742079 6d203d20 . float ym = │ │ │ │ - 0x00de2430 6d6f6428 70782e79 202d206b 526f7743 mod(px.y - kRowC │ │ │ │ - 0x00de2440 656e7465 7250782c 206b526f 77506572 enterPx, kRowPer │ │ │ │ - 0x00de2450 696f6450 78293b20 0a202020 20666c6f iodPx); . flo │ │ │ │ - 0x00de2460 61742079 44697374 203d206d 696e2879 at yDist = min(y │ │ │ │ - 0x00de2470 6d2c206b 526f7750 6572696f 64507820 m, kRowPeriodPx │ │ │ │ - 0x00de2480 2d20796d 293b200a 20202020 666c6f61 - ym); . floa │ │ │ │ - 0x00de2490 74206161 59203d20 66776964 74682870 t aaY = fwidth(p │ │ │ │ - 0x00de24a0 782e7929 3b200a20 20202066 6c6f6174 x.y); . float │ │ │ │ - 0x00de24b0 206f6e52 6f77203d 20312e30 202d2073 onRow = 1.0 - s │ │ │ │ - 0x00de24c0 6d6f6f74 68737465 70286b48 616c6654 moothstep(kHalfT │ │ │ │ - 0x00de24d0 6869636b 5078202d 20616159 2c206b48 hickPx - aaY, kH │ │ │ │ - 0x00de24e0 616c6654 6869636b 5078202b 20616159 alfThickPx + aaY │ │ │ │ - 0x00de24f0 2c207944 69737429 3b200a20 20202066 , yDist); . f │ │ │ │ - 0x00de2500 6c6f6174 20726f77 49647820 3d20666c loat rowIdx = fl │ │ │ │ - 0x00de2510 6f6f7228 2870782e 79202d20 6b526f77 oor((px.y - kRow │ │ │ │ - 0x00de2520 43656e74 65725078 29202f20 6b526f77 CenterPx) / kRow │ │ │ │ - 0x00de2530 50657269 6f645078 202b2030 2e35293b PeriodPx + 0.5); │ │ │ │ - 0x00de2540 200a2020 2020666c 6f617420 78506861 . float xPha │ │ │ │ - 0x00de2550 7365203d 2070782e 78202b20 6d6f6428 se = px.x + mod( │ │ │ │ - 0x00de2560 726f7749 64782c20 322e3029 202a2028 rowIdx, 2.0) * ( │ │ │ │ - 0x00de2570 6b446173 68506572 696f6450 78202a20 kDashPeriodPx * │ │ │ │ - 0x00de2580 302e3529 3b200a20 20202066 6c6f6174 0.5); . float │ │ │ │ - 0x00de2590 20784469 7374203d 20616273 286d6f64 xDist = abs(mod │ │ │ │ - 0x00de25a0 28785068 6173652c 206b4461 73685065 (xPhase, kDashPe │ │ │ │ - 0x00de25b0 72696f64 50782920 2d206b44 61736848 riodPx) - kDashH │ │ │ │ - 0x00de25c0 616c6650 78293b20 0a202020 20666c6f alfPx); . flo │ │ │ │ - 0x00de25d0 61742061 6158203d 20667769 64746828 at aaX = fwidth( │ │ │ │ - 0x00de25e0 70782e78 293b200a 20202020 666c6f61 px.x); . floa │ │ │ │ - 0x00de25f0 74206f6e 44617368 203d2031 2e30202d t onDash = 1.0 - │ │ │ │ - 0x00de2600 20736d6f 6f746873 74657028 6b446173 smoothstep(kDas │ │ │ │ - 0x00de2610 6848616c 66507820 2d206161 582c206b hHalfPx - aaX, k │ │ │ │ - 0x00de2620 44617368 48616c66 5078202b 20616158 DashHalfPx + aaX │ │ │ │ - 0x00de2630 2c207844 69737429 3b200a20 20202063 , xDist); . c │ │ │ │ - 0x00de2640 6f6c6f72 2e61202a 3d206f6e 526f7720 olor.a *= onRow │ │ │ │ - 0x00de2650 2a206f6e 44617368 202a2075 5f6f7061 * onDash * u_opa │ │ │ │ - 0x00de2660 63697479 3b200a20 20202076 5f467261 city; . v_Fra │ │ │ │ - 0x00de2670 67436f6c 6f72203d 20636f6c 6f723b20 gColor = color; │ │ │ │ - 0x00de2680 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00de2690 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de26a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de26b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de26c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de26d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de26e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de26f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de2700 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de2710 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de2720 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de2730 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de2740 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de2750 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de2760 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de2770 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de2780 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de2790 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de27a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de27b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de27c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de27d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de27e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de27f0 63322076 5f746578 436f6f72 64733b20 c2 v_texCoords; │ │ │ │ - 0x00de2800 0a202069 6e207665 63342076 5f636f6c . in vec4 v_col │ │ │ │ - 0x00de2810 6f723b20 0a20206f 75742076 65633420 or; . out vec4 │ │ │ │ - 0x00de2820 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00de2830 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00de2840 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00de2850 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00de2860 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00de2870 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ - 0x00de2880 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ - 0x00de2890 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ - 0x00de28a0 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ - 0x00de28b0 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ - 0x00de28c0 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ - 0x00de28d0 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ - 0x00de28e0 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ - 0x00de28f0 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ - 0x00de2900 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ - 0x00de2910 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ - 0x00de2920 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ - 0x00de2930 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ - 0x00de2940 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ - 0x00de2950 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ - 0x00de2960 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ - 0x00de2970 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ - 0x00de2980 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ - 0x00de2990 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00de29a0 7b200a20 2020204c 4f575f50 20766563 { . LOW_P vec │ │ │ │ - 0x00de29b0 3420636f 6c6f7220 3d207465 78747572 4 color = textur │ │ │ │ - 0x00de29c0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00de29d0 74657843 6f6f7264 73293b20 0a202020 texCoords); . │ │ │ │ - 0x00de29e0 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ - 0x00de29f0 6f6c6f72 202a2076 5f636f6c 6f723b20 olor * v_color; │ │ │ │ - 0x00de2a00 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00de2a10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de2a20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de2a30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de2a40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de2a50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de2a60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de2a70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de2a80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de2a90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de2aa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de2ab0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de2ac0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de2ad0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de2ae0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de2af0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de2b00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de2b10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de2b20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de2b30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de2b40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de2b50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de2b60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de2b70 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00de2b80 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00de2b90 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ - 0x00de2ba0 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ - 0x00de2bb0 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ - 0x00de2bc0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00de2bd0 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ - 0x00de2be0 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ - 0x00de2bf0 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ - 0x00de2c00 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00de2c10 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00de2c20 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00de2c30 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00de2c40 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00de2c50 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00de2c60 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00de2c70 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00de2c80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de2c90 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00de2ca0 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00de2cb0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00de2cc0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00de2cd0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00de2ce0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00de2cf0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de2d00 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00de2d10 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00de2d20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de2d30 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00de2d40 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00de2d50 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00de2d60 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00de2d70 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00de2d80 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00de2d90 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00de2da0 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00de2db0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00de2dc0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00de2dd0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00de2de0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00de2df0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00de2e00 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00de2e10 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00de2e20 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00de2e30 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00de2e40 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00de2e50 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00de2e60 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00de2e70 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00de2e80 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00de2e90 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00de2ea0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de2eb0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00de2ec0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00de2ed0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00de2ee0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00de2ef0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00de2f00 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00de2f10 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00de2f20 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00de2f30 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00de2f40 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00de2f50 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00de2f60 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00de2f70 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00de2f80 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00de2f90 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00de2fa0 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00de2fb0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00de2fc0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00de2fd0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00de2fe0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00de2ff0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00de3000 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00de3010 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00de3020 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00de3030 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00de3040 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00de3050 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00de3060 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00de3070 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00de3080 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00de3090 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00de30a0 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00de30b0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00de30c0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00de30d0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00de30e0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00de30f0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00de3100 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00de3110 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00de3120 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00de3130 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00de3140 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00de3150 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00de3160 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00de3170 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00de3180 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00de3190 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ - 0x00de31a0 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ - 0x00de31b0 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ - 0x00de31c0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00de31d0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00de31e0 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ - 0x00de31f0 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ - 0x00de3200 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00de3210 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00de3220 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00de3230 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00de3240 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00de3250 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00de3260 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00de3270 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00de3280 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ - 0x00de3290 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de32a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de32b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de32c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de32d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de32e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de32f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de3300 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de3310 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de3320 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de3330 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de3340 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de3350 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de3360 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de3370 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de3380 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de3390 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de33a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de33b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de33c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de33d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de33e0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00de33f0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00de3400 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00de3410 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00de3420 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00de3430 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00de3440 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00de3450 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00de3460 23656e64 6966200a 20206f75 74207665 #endif . out ve │ │ │ │ - 0x00de3470 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ - 0x00de3480 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00de3490 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00de34a0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00de34b0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ - 0x00de34c0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ - 0x00de34d0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ - 0x00de34e0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ - 0x00de34f0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ - 0x00de3500 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00de3510 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00de3520 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ - 0x00de3530 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ - 0x00de3540 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ - 0x00de3550 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ - 0x00de3560 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00de3570 696e6550 6173733b 200a2020 636f6e73 inePass; . cons │ │ │ │ - 0x00de3580 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00de3590 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00de35a0 2e303b20 0a20204c 4f575f50 20766563 .0; . LOW_P vec │ │ │ │ - 0x00de35b0 33204d6f 64756c61 74654279 50617474 3 ModulateByPatt │ │ │ │ - 0x00de35c0 65726e44 6f747328 4c4f575f 50207665 ernDots(LOW_P ve │ │ │ │ - 0x00de35d0 63332063 6f6c6f72 2c20666c 6f617420 c3 color, float │ │ │ │ - 0x00de35e0 6461726b 656e2c20 666c6f61 7420636f darken, float co │ │ │ │ - 0x00de35f0 76657261 67652920 0a20207b 200a2020 verage) . { . │ │ │ │ - 0x00de3600 2020636f 6e737420 666c6f61 74206b4c const float kL │ │ │ │ - 0x00de3610 69676874 656e203d 20302e30 37353b20 ighten = 0.075; │ │ │ │ - 0x00de3620 0a202020 20696620 28646f74 28636f6c . if (dot(col │ │ │ │ - 0x00de3630 6f722c20 76656333 28302e32 3132362c or, vec3(0.2126, │ │ │ │ - 0x00de3640 20302e37 3135322c 20302e30 37323229 0.7152, 0.0722) │ │ │ │ - 0x00de3650 29203c20 302e3529 200a2020 20202020 ) < 0.5) . │ │ │ │ - 0x00de3660 72657475 726e2063 6f6c6f72 202b2063 return color + c │ │ │ │ - 0x00de3670 6f766572 61676520 2a206b4c 69676874 overage * kLight │ │ │ │ - 0x00de3680 656e3b20 0a202020 20726574 75726e20 en; . return │ │ │ │ - 0x00de3690 636f6c6f 72202a20 6d697828 312e302c color * mix(1.0, │ │ │ │ - 0x00de36a0 20646172 6b656e2c 20636f76 65726167 darken, coverag │ │ │ │ - 0x00de36b0 65293b20 0a20207d 200a2020 766f6964 e); . } . void │ │ │ │ - 0x00de36c0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00de36d0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00de36e0 46200a20 2020204c 4f575f50 20766563 F . LOW_P vec │ │ │ │ - 0x00de36f0 3420636f 6c6f7220 3d20765f 636f6c6f 4 color = v_colo │ │ │ │ - 0x00de3700 723b200a 20202365 6c736520 0a202020 r; . #else . │ │ │ │ - 0x00de3710 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ - 0x00de3720 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00de3730 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ - 0x00de3740 6578436f 6f726429 3b200a20 2023656e exCoord); . #en │ │ │ │ - 0x00de3750 64696620 0a202020 20636f6c 6f722e61 dif . color.a │ │ │ │ - 0x00de3760 202a3d20 755f6f70 61636974 793b200a *= u_opacity; . │ │ │ │ - 0x00de3770 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ - 0x00de3780 3d20636f 6c6f723b 200a2020 7d200a00 = color; . } .. │ │ │ │ - 0x00de3790 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de37a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de37b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de37c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de37d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de37e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de37f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de3800 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de3810 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de3820 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de3830 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de3840 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de3850 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de3860 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de3870 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de3880 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de3890 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de38a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de38b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de38c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de38d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de38e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de38f0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00de3900 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00de3910 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00de3920 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00de3930 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00de3940 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ - 0x00de3950 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ - 0x00de3960 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ - 0x00de3970 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ - 0x00de3980 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00de3990 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00de39a0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00de39b0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00de39c0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ - 0x00de39d0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ - 0x00de39e0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ - 0x00de39f0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ - 0x00de3a00 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ - 0x00de3a10 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00de3a20 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00de3a30 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ - 0x00de3a40 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ - 0x00de3a50 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ - 0x00de3a60 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ - 0x00de3a70 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00de3a80 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ - 0x00de3a90 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ - 0x00de3aa0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00de3ab0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00de3ac0 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ - 0x00de3ad0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00de3ae0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00de3af0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00de3b00 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00de3b10 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00de3b20 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00de3b30 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00de3b40 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00de3b50 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00de3b60 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00de3b70 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00de3b80 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00de3b90 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00de3ba0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00de3bb0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00de3bc0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00de3bd0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00de3be0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00de3bf0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de3c00 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00de3c10 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00de3c20 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00de3c30 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00de3c40 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00de3c50 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00de3c60 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00de3c70 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00de3c80 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00de3c90 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de3ca0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00de3cb0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00de3cc0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de3cd0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00de3ce0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00de3cf0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00de3d00 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00de3d10 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00de3d20 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00de3d30 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00de3d40 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00de3d50 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00de3d60 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00de3d70 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00de3d80 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00de3d90 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00de3da0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00de3db0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00de3dc0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00de3dd0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00de3de0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00de3df0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00de3e00 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00de3e10 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00de3e20 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00de3e30 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00de3e40 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00de3e50 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00de3e60 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00de3e70 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00de3e80 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00de3e90 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00de3ea0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00de3eb0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00de3ec0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00de3ed0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00de3ee0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00de3ef0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00de3f00 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00de3f10 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00de3f20 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00de3f30 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00de3f40 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00de3f50 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00de3f60 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00de3f70 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00de3f80 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00de3f90 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00de3fa0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00de3fb0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00de3fc0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00de3fd0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00de3fe0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00de3ff0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00de4000 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00de4010 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00de4020 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00de4030 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00de4040 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00de4050 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00de4060 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00de4070 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ - 0x00de4080 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ - 0x00de4090 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ - 0x00de40a0 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ - 0x00de40b0 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ - 0x00de40c0 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ - 0x00de40d0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00de40e0 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00de40f0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00de4100 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ - 0x00de4110 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ - 0x00de4120 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ - 0x00de4130 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ - 0x00de4140 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00de4150 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ - 0x00de4160 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ - 0x00de4170 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ - 0x00de4180 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ - 0x00de4190 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de41a0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de41b0 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ - 0x00de41c0 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ - 0x00de41d0 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ - 0x00de41e0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00de41f0 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ - 0x00de4200 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00de4210 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ - 0x00de4220 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00de4230 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00de4240 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00de4250 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00de4260 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00de4270 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00de4280 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ - 0x00de4290 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ - 0x00de42a0 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00de42b0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00de42c0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00de42d0 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ - 0x00de42e0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00de42f0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00de4300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de4310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de4320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de4330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de4340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de4350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de4360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de4370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de4380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de4390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de43a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de43b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de43c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de43d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de43e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de43f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de4400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de4410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de4420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de4430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de4440 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de4450 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00de4460 7264733b 200a2020 696e2076 65633220 rds; . in vec2 │ │ │ │ - 0x00de4470 765f6d61 736b5465 78436f6f 7264733b v_maskTexCoords; │ │ │ │ - 0x00de4480 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00de4490 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00de44a0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00de44b0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00de44c0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00de44d0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00de44e0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00de44f0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00de4500 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00de4510 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00de4520 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00de4530 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00de4540 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00de4550 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00de4560 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00de4570 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00de4580 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00de4590 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ - 0x00de45a0 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ - 0x00de45b0 65783b20 0a202075 6e69666f 726d2073 ex; . uniform s │ │ │ │ - 0x00de45c0 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ - 0x00de45d0 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00de45e0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00de45f0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00de4600 20204c4f 575f5020 76656333 204d6f64 LOW_P vec3 Mod │ │ │ │ - 0x00de4610 756c6174 65427950 61747465 726e446f ulateByPatternDo │ │ │ │ - 0x00de4620 7473284c 4f575f50 20766563 3320636f ts(LOW_P vec3 co │ │ │ │ - 0x00de4630 6c6f722c 20666c6f 61742064 61726b65 lor, float darke │ │ │ │ - 0x00de4640 6e2c2066 6c6f6174 20636f76 65726167 n, float coverag │ │ │ │ - 0x00de4650 6529200a 20207b20 0a202020 20636f6e e) . { . con │ │ │ │ - 0x00de4660 73742066 6c6f6174 206b4c69 67687465 st float kLighte │ │ │ │ - 0x00de4670 6e203d20 302e3037 353b200a 20202020 n = 0.075; . │ │ │ │ - 0x00de4680 69662028 646f7428 636f6c6f 722c2076 if (dot(color, v │ │ │ │ - 0x00de4690 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ - 0x00de46a0 35322c20 302e3037 32322929 203c2030 52, 0.0722)) < 0 │ │ │ │ - 0x00de46b0 2e352920 0a202020 20202072 65747572 .5) . retur │ │ │ │ - 0x00de46c0 6e20636f 6c6f7220 2b20636f 76657261 n color + covera │ │ │ │ - 0x00de46d0 6765202a 206b4c69 67687465 6e3b200a ge * kLighten; . │ │ │ │ - 0x00de46e0 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00de46f0 202a206d 69782831 2e302c20 6461726b * mix(1.0, dark │ │ │ │ - 0x00de4700 656e2c20 636f7665 72616765 293b200a en, coverage); . │ │ │ │ - 0x00de4710 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00de4720 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00de4730 34206669 6e616c43 6f6c6f72 203d2074 4 finalColor = t │ │ │ │ - 0x00de4740 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00de4750 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ - 0x00de4760 72647329 202a2074 65787475 72652875 rds) * texture(u │ │ │ │ - 0x00de4770 5f6d6173 6b546578 2c20765f 6d61736b _maskTex, v_mask │ │ │ │ - 0x00de4780 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ - 0x00de4790 2066696e 616c436f 6c6f722e 61202a3d finalColor.a *= │ │ │ │ - 0x00de47a0 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ - 0x00de47b0 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ - 0x00de47c0 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ - 0x00de47d0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de47e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de47f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de4800 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de4810 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de4820 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de4830 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de4840 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de4850 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de4860 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de4870 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de4880 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de4890 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de48a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de48b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de48c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de48d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de48e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de48f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de4900 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de4910 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de4920 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de4930 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00de4940 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00de4950 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00de4960 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00de4970 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00de4980 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00de4990 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00de49a0 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00de49b0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00de49c0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00de49d0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00de49e0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00de49f0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00de4a00 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00de4a10 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00de4a20 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00de4a30 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00de4a40 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00de4a50 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00de4a60 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00de4a70 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00de4a80 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00de4a90 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00de4aa0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00de4ab0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00de4ac0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00de4ad0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00de4ae0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00de4af0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00de4b00 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00de4b10 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00de4b20 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00de4b30 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00de4b40 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00de4b50 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00de4b60 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00de4b70 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00de4b80 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00de4b90 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00de4ba0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00de4bb0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00de4bc0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00de4bd0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00de4be0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00de4bf0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00de4c00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de4c10 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00de4c20 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00de4c30 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00de4c40 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00de4c50 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00de4c60 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00de4c70 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00de4c80 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00de4c90 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00de4ca0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00de4cb0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00de4cc0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00de4cd0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00de4ce0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00de4cf0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00de4d00 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00de4d10 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00de4d20 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00de4d30 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00de4d40 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00de4d50 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00de4d60 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00de4d70 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00de4d80 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00de4d90 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00de4da0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00de4db0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00de4dc0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00de4dd0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00de4de0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00de4df0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00de4e00 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00de4e10 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00de4e20 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00de4e30 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00de4e40 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00de4e50 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00de4e60 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00de4e70 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00de4e80 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00de4e90 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00de4ea0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00de4eb0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00de4ec0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00de4ed0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00de4ee0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00de4ef0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00de4f00 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00de4f10 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00de4f20 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00de4f30 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00de4f40 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00de4f50 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00de4f60 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00de4f70 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00de4f80 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00de4f90 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00de4fa0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00de4fb0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00de4fc0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00de4fd0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00de4fe0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00de4ff0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00de5000 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00de5010 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00de5020 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00de5030 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00de5040 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00de5050 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00de5060 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00de5070 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ - 0x00de5080 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ - 0x00de5090 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ - 0x00de50a0 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ - 0x00de50b0 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ - 0x00de50c0 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00de50d0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00de50e0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00de50f0 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ - 0x00de5100 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ - 0x00de5110 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00de5120 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00de5130 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00de5140 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00de5150 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00de5160 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00de5170 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00de5180 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de5190 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de51a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de51b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de51c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de51d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de51e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de51f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de5200 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de5210 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de5220 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de5230 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de5240 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de5250 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de5260 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de5270 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de5280 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de5290 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de52a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de52b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de52c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de52d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00de52e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00de52f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00de5300 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00de5310 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00de5320 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00de5330 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00de5340 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00de5350 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00de5360 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00de5370 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00de5380 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00de5390 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00de53a0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00de53b0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00de53c0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00de53d0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00de53e0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00de53f0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00de5400 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00de5410 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00de5420 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00de5430 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00de5440 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00de5450 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00de5460 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00de5470 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00de5480 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00de5490 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00de54a0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00de54b0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00de54c0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00de54d0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00de54e0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00de54f0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00de5500 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00de5510 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00de5520 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00de5530 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00de5540 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00de5550 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00de5560 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00de5570 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00de5580 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00de5590 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00de55a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de55b0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00de55c0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00de55d0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00de55e0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00de55f0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00de5600 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00de5610 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00de5620 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00de5630 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00de5640 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00de5650 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00de5660 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00de5670 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00de5680 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00de5690 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00de56a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00de56b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00de56c0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00de56d0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00de56e0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00de56f0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00de5700 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00de5710 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00de5720 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00de5730 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00de5740 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00de5750 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00de5760 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00de5770 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00de5780 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00de5790 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00de57a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00de57b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00de57c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00de57d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00de57e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00de57f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00de5800 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00de5810 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00de5820 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00de5830 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00de5840 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00de5850 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00de5860 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00de5870 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00de5880 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00de5890 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00de58a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00de58b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00de58c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00de58d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00de58e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00de58f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00de5900 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00de5910 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00de5920 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00de5930 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00de5940 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00de5950 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00de5960 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00de5970 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00de5980 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00de5990 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00de59a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00de59b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00de59c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00de59d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00de59e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00de59f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00de5a00 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00de5a10 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00de5a20 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00de5a30 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00de5a40 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00de5a50 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00de5a60 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00de5a70 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00de5a80 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00de5a90 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00de5aa0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00de5ab0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00de5ac0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00de5ad0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de5ae0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de5af0 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00de5b00 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00de5b10 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00de5b20 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00de5b30 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00de5b40 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00de5b50 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00de5b60 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00de5b70 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00de5b80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de5b90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de5ba0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de5bb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de5bc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de5bd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de5be0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de5bf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de5c00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de5c10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de5c20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de5c30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de5c40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de5c50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de5c60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de5c70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de5c80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de5c90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de5ca0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de5cb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de5cc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de5cd0 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00de5ce0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00de5cf0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00de5d00 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00de5d10 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00de5d20 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00de5d30 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00de5d40 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00de5d50 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00de5d60 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00de5d70 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00de5d80 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00de5d90 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00de5da0 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00de5db0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00de5dc0 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00de5dd0 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00de5de0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00de5df0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00de5e00 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00de5e10 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00de5e20 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00de5e30 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00de5e40 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00de5e50 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00de5e60 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00de5e70 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00de5e80 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00de5e90 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00de5ea0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00de5eb0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00de5ec0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00de5ed0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de5ee0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00de5ef0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00de5f00 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00de5f10 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00de5f20 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00de5f30 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00de5f40 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00de5f50 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00de5f60 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00de5f70 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00de5f80 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00de5f90 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00de5fa0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de5fb0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00de5fc0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00de5fd0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de5fe0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00de5ff0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00de6000 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00de6010 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00de6020 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00de6030 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00de6040 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00de6050 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00de6060 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00de6070 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00de6080 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00de6090 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00de60a0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00de60b0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00de60c0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00de60d0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00de60e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00de60f0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00de6100 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00de6110 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00de6120 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00de6130 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00de6140 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00de6150 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00de6160 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00de6170 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00de6180 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de6190 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00de61a0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00de61b0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00de61c0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00de61d0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00de61e0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00de61f0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00de6200 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00de6210 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00de6220 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00de6230 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00de6240 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00de6250 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00de6260 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00de6270 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00de6280 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00de6290 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00de62a0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00de62b0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00de62c0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00de62d0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00de62e0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00de62f0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00de6300 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00de6310 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00de6320 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00de6330 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00de6340 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00de6350 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00de6360 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00de6370 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00de6380 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00de6390 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00de63a0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00de63b0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00de63c0 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ - 0x00de63d0 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ - 0x00de63e0 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ - 0x00de63f0 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ - 0x00de6400 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ - 0x00de6410 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ - 0x00de6420 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ - 0x00de6430 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ - 0x00de6440 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ - 0x00de6450 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ - 0x00de6460 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ - 0x00de6470 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ - 0x00de6480 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ - 0x00de6490 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ - 0x00de64a0 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ - 0x00de64b0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00de64c0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00de64d0 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ - 0x00de64e0 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ - 0x00de64f0 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ - 0x00de6500 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ - 0x00de6510 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ - 0x00de6520 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ - 0x00de6530 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00de6540 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ - 0x00de6550 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ - 0x00de6560 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00de6570 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00de6580 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ - 0x00de6590 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ - 0x00de65a0 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00de65b0 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00de65c0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00de65d0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00de65e0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00de65f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de6600 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de6610 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de6620 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de6630 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de6640 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de6650 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de6660 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de6670 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de6680 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de6690 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de66a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de66b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de66c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de66d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de66e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de66f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de6700 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de6710 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de6720 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de6730 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de6740 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de6750 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00de6760 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00de6770 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00de6780 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00de6790 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00de67a0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00de67b0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00de67c0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00de67d0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00de67e0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00de67f0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00de6800 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00de6810 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00de6820 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00de6830 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00de6840 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00de6850 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00de6860 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00de6870 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00de6880 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00de6890 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00de68a0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00de68b0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00de68c0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00de68d0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00de68e0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00de68f0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00de6900 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00de6910 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00de6920 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00de6930 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de6940 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00de6950 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00de6960 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00de6970 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00de6980 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00de6990 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00de69a0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00de69b0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00de69c0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00de69d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de69e0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00de69f0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00de6a00 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00de6a10 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00de6a20 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00de6a30 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00de6a40 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00de6a50 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00de6a60 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00de6a70 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de6a80 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00de6a90 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00de6aa0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de6ab0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00de6ac0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00de6ad0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00de6ae0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00de6af0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00de6b00 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00de6b10 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00de6b20 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00de6b30 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00de6b40 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00de6b50 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00de6b60 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00de6b70 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00de6b80 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00de6b90 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00de6ba0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00de6bb0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00de6bc0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00de6bd0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00de6be0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00de6bf0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00de6c00 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00de6c10 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00de6c20 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00de6c30 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00de6c40 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00de6c50 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00de6c60 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00de6c70 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00de6c80 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00de6c90 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00de6ca0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00de6cb0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00de6cc0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00de6cd0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00de6ce0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00de6cf0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00de6d00 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00de6d10 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00de6d20 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00de6d30 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00de6d40 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00de6d50 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00de6d60 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00de6d70 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00de6d80 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00de6d90 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00de6da0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00de6db0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00de6dc0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00de6dd0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00de6de0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00de6df0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00de6e00 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00de6e10 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00de6e20 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00de6e30 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00de6e40 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00de6e50 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00de6e60 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00de6e70 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00de6e80 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ - 0x00de6e90 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ - 0x00de6ea0 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ - 0x00de6eb0 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ - 0x00de6ec0 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ - 0x00de6ed0 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ - 0x00de6ee0 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ - 0x00de6ef0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00de6f00 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ - 0x00de6f10 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00de6f20 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ - 0x00de6f30 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ - 0x00de6f40 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ - 0x00de6f50 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ - 0x00de6f60 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ - 0x00de6f70 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ - 0x00de6f80 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ - 0x00de6f90 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00de6fa0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00de6fb0 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ - 0x00de6fc0 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ - 0x00de6fd0 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00de6fe0 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ - 0x00de6ff0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00de7000 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ - 0x00de7010 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00de7020 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de7030 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de7040 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de7050 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de7060 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de7070 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de7080 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de7090 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de70a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de70b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de70c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de70d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de70e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de70f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de7100 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de7110 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de7120 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de7130 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de7140 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de7150 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de7160 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de7170 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00de7180 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00de7190 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00de71a0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00de71b0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00de71c0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00de71d0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00de71e0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00de71f0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00de7200 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00de7210 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00de7220 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00de7230 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00de7240 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00de7250 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00de7260 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00de7270 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00de7280 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00de7290 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00de72a0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00de72b0 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00de72c0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00de72d0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00de72e0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00de72f0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00de7300 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00de7310 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00de7320 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00de7330 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00de7340 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00de7350 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00de7360 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00de7370 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de7380 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00de7390 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00de73a0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00de73b0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00de73c0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00de73d0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00de73e0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00de73f0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00de7400 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00de7410 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00de7420 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00de7430 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00de7440 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00de7450 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00de7460 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00de7470 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de7480 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00de7490 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00de74a0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00de74b0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00de74c0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00de74d0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00de74e0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00de74f0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00de7500 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00de7510 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00de7520 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00de7530 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00de7540 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00de7550 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00de7560 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00de7570 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00de7580 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00de7590 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00de75a0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00de75b0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00de75c0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00de75d0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00de75e0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00de75f0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00de7600 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00de7610 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00de7620 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de7630 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00de7640 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00de7650 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00de7660 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00de7670 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00de7680 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00de7690 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00de76a0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00de76b0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00de76c0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00de76d0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00de76e0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00de76f0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00de7700 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00de7710 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00de7720 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00de7730 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00de7740 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00de7750 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00de7760 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00de7770 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00de7780 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00de7790 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00de77a0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00de77b0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00de77c0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00de77d0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00de77e0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00de77f0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00de7800 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00de7810 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00de7820 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00de7830 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00de7840 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00de7850 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00de7860 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00de7870 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00de7880 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00de7890 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00de78a0 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ - 0x00de78b0 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ - 0x00de78c0 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ - 0x00de78d0 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ - 0x00de78e0 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ - 0x00de78f0 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ - 0x00de7900 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00de7910 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00de7920 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00de7930 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ - 0x00de7940 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ - 0x00de7950 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00de7960 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ - 0x00de7970 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ - 0x00de7980 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00de7990 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00de79a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de79b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de79c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de79d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de79e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de79f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de7a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de7a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de7a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de7a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de7a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de7a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de7a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de7a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de7a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de7a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de7aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de7ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de7ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de7ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de7ae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de7af0 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ - 0x00de7b00 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00de7b10 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00de7b20 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00de7b30 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00de7b40 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00de7b50 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00de7b60 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00de7b70 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00de7b80 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00de7b90 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00de7ba0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00de7bb0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00de7bc0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00de7bd0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00de7be0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00de7bf0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00de7c00 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00de7c10 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00de7c20 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00de7c30 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00de7c40 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00de7c50 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00de7c60 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00de7c70 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00de7c80 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00de7c90 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00de7ca0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00de7cb0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00de7cc0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00de7cd0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00de7ce0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00de7cf0 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ - 0x00de7d00 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ - 0x00de7d10 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ - 0x00de7d20 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ - 0x00de7d30 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ - 0x00de7d40 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ - 0x00de7d50 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ - 0x00de7d60 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00de7d70 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00de7d80 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ - 0x00de7d90 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ - 0x00de7da0 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ - 0x00de7db0 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ - 0x00de7dc0 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ - 0x00de7dd0 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ - 0x00de7de0 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ - 0x00de7df0 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ - 0x00de7e00 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ - 0x00de7e10 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ - 0x00de7e20 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ - 0x00de7e30 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ - 0x00de7e40 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ - 0x00de7e50 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ - 0x00de7e60 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ - 0x00de7e70 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ - 0x00de7e80 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ - 0x00de7e90 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00de7ea0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00de7eb0 69662028 765f6c65 6e677468 2e78203c if (v_length.x < │ │ │ │ - 0x00de7ec0 20765f6c 656e6774 682e7a29 200a2020 v_length.z) . │ │ │ │ - 0x00de7ed0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ - 0x00de7ee0 20207665 63322063 6f656673 203d2073 vec2 coefs = s │ │ │ │ - 0x00de7ef0 74657028 765f6c65 6e677468 2e78782c tep(v_length.xx, │ │ │ │ - 0x00de7f00 20755f66 616b6542 6f726465 7273293b u_fakeBorders); │ │ │ │ - 0x00de7f10 200a2020 2020636f 6566732e 79203d20 . coefs.y = │ │ │ │ - 0x00de7f20 312e3020 2d20636f 6566732e 793b200a 1.0 - coefs.y; . │ │ │ │ - 0x00de7f30 20202020 76656334 206d6169 6e436f6c vec4 mainCol │ │ │ │ - 0x00de7f40 6f72203d 206d6978 28755f63 6f6c6f72 or = mix(u_color │ │ │ │ - 0x00de7f50 2c20755f 66616b65 436f6c6f 722c2063 , u_fakeColor, c │ │ │ │ - 0x00de7f60 6f656673 2e78293b 200a2020 20206d61 oefs.x); . ma │ │ │ │ - 0x00de7f70 696e436f 6c6f7220 3d206d69 78286d61 inColor = mix(ma │ │ │ │ - 0x00de7f80 696e436f 6c6f722c 20755f66 616b6543 inColor, u_fakeC │ │ │ │ - 0x00de7f90 6f6c6f72 2c20636f 6566732e 79293b20 olor, coefs.y); │ │ │ │ - 0x00de7fa0 0a202020 20766563 34206d61 696e4f75 . vec4 mainOu │ │ │ │ - 0x00de7fb0 746c696e 65436f6c 6f72203d 206d6978 tlineColor = mix │ │ │ │ - 0x00de7fc0 28755f6f 75746c69 6e65436f 6c6f722c (u_outlineColor, │ │ │ │ - 0x00de7fd0 20755f66 616b654f 75746c69 6e65436f u_fakeOutlineCo │ │ │ │ - 0x00de7fe0 6c6f722c 20636f65 66732e78 293b200a lor, coefs.x); . │ │ │ │ - 0x00de7ff0 20202020 6d61696e 4f75746c 696e6543 mainOutlineC │ │ │ │ - 0x00de8000 6f6c6f72 203d206d 6978286d 61696e4f olor = mix(mainO │ │ │ │ - 0x00de8010 75746c69 6e65436f 6c6f722c 20755f66 utlineColor, u_f │ │ │ │ - 0x00de8020 616b654f 75746c69 6e65436f 6c6f722c akeOutlineColor, │ │ │ │ - 0x00de8030 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ - 0x00de8040 76656334 20636f6c 6f72203d 206d6978 vec4 color = mix │ │ │ │ - 0x00de8050 286d6978 286d6169 6e436f6c 6f722c20 (mix(mainColor, │ │ │ │ - 0x00de8060 76656334 28765f63 6f6c6f72 2e726762 vec4(v_color.rgb │ │ │ │ - 0x00de8070 2c20312e 30292c20 765f636f 6c6f722e , 1.0), v_color. │ │ │ │ - 0x00de8080 61292c20 6d61696e 436f6c6f 722c2073 a), mainColor, s │ │ │ │ - 0x00de8090 74657028 755f726f 75746550 6172616d tep(u_routeParam │ │ │ │ - 0x00de80a0 732e772c 20302e30 29293b20 0a202020 s.w, 0.0)); . │ │ │ │ - 0x00de80b0 20636f6c 6f72203d 206d6978 28636f6c color = mix(col │ │ │ │ - 0x00de80c0 6f722c20 6d61696e 4f75746c 696e6543 or, mainOutlineC │ │ │ │ - 0x00de80d0 6f6c6f72 2c207374 6570286b 4f75746c olor, step(kOutl │ │ │ │ - 0x00de80e0 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ - 0x00de80f0 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ - 0x00de8100 3b200a20 20202063 6f6c6f72 203d206d ; . color = m │ │ │ │ - 0x00de8110 69782863 6f6c6f72 2c206d61 696e4f75 ix(color, mainOu │ │ │ │ - 0x00de8120 746c696e 65436f6c 6f722c20 736d6f6f tlineColor, smoo │ │ │ │ - 0x00de8130 74687374 6570286b 4f75746c 696e6554 thstep(kOutlineT │ │ │ │ - 0x00de8140 68726573 686f6c64 322c206b 4f75746c hreshold2, kOutl │ │ │ │ - 0x00de8150 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ - 0x00de8160 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ - 0x00de8170 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ - 0x00de8180 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ - 0x00de8190 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ - 0x00de81a0 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ - 0x00de81b0 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ - 0x00de81c0 29293b20 0a202020 20636f6c 6f72203d )); . color = │ │ │ │ - 0x00de81d0 20766563 34286d69 7828636f 6c6f722e vec4(mix(color. │ │ │ │ - 0x00de81e0 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ - 0x00de81f0 2e726762 2c20755f 6d61736b 436f6c6f .rgb, u_maskColo │ │ │ │ - 0x00de8200 722e6129 2c20636f 6c6f722e 61293b20 r.a), color.a); │ │ │ │ - 0x00de8210 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ - 0x00de8220 203d2063 6f6c6f72 3b200a20 207d200a = color; . } . │ │ │ │ - 0x00de8230 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de8240 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de8250 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de8260 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de8270 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de8280 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de8290 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de82a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de82b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de82c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de82d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de82e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de82f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de8300 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de8310 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de8320 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de8330 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de8340 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de8350 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de8360 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de8370 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de8380 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de8390 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00de83a0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00de83b0 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ - 0x00de83c0 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ - 0x00de83d0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00de83e0 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ - 0x00de83f0 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ - 0x00de8400 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00de8410 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00de8420 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00de8430 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00de8440 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00de8450 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00de8460 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00de8470 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ - 0x00de8480 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ - 0x00de8490 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ - 0x00de84a0 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ - 0x00de84b0 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ - 0x00de84c0 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ - 0x00de84d0 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ - 0x00de84e0 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ - 0x00de84f0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00de8500 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ - 0x00de8510 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ - 0x00de8520 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ - 0x00de8530 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ - 0x00de8540 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ - 0x00de8550 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ - 0x00de8560 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ - 0x00de8570 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ - 0x00de8580 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ - 0x00de8590 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ - 0x00de85a0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00de85b0 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00de85c0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00de85d0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00de85e0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00de85f0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00de8600 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00de8610 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00de8620 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00de8630 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00de8640 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00de8650 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00de8660 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00de8670 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00de8680 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00de8690 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00de86a0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00de86b0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00de86c0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00de86d0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00de86e0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00de86f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de8700 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00de8710 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00de8720 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00de8730 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00de8740 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00de8750 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00de8760 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00de8770 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00de8780 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00de8790 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00de87a0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00de87b0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00de87c0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00de87d0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00de87e0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00de87f0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00de8800 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00de8810 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00de8820 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00de8830 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00de8840 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00de8850 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00de8860 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00de8870 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00de8880 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00de8890 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00de88a0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00de88b0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00de88c0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00de88d0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00de88e0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00de88f0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00de8900 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00de8910 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00de8920 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00de8930 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00de8940 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00de8950 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00de8960 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00de8970 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00de8980 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00de8990 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00de89a0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00de89b0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00de89c0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00de89d0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00de89e0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00de89f0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00de8a00 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00de8a10 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00de8a20 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00de8a30 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00de8a40 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00de8a50 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00de8a60 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00de8a70 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00de8a80 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00de8a90 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00de8aa0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00de8ab0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00de8ac0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00de8ad0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00de8ae0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00de8af0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00de8b00 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00de8b10 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00de8b20 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00de8b30 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00de8b40 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00de8b50 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00de8b60 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00de8b70 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00de8b80 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00de8b90 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00de8ba0 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ - 0x00de8bb0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00de8bc0 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ - 0x00de8bd0 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ - 0x00de8be0 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ - 0x00de8bf0 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ - 0x00de8c00 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ - 0x00de8c10 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ - 0x00de8c20 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ - 0x00de8c30 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ - 0x00de8c40 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ - 0x00de8c50 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00de8c60 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ - 0x00de8c70 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ - 0x00de8c80 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ - 0x00de8c90 0a202020 20202020 20202020 20202020 . │ │ │ │ - 0x00de8ca0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de8cb0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de8cc0 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ - 0x00de8cd0 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ - 0x00de8ce0 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ - 0x00de8cf0 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ - 0x00de8d00 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ - 0x00de8d10 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ - 0x00de8d20 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ - 0x00de8d30 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ - 0x00de8d40 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ - 0x00de8d50 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ - 0x00de8d60 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ - 0x00de8d70 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ - 0x00de8d80 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ - 0x00de8d90 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00de8da0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00de8db0 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ - 0x00de8dc0 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ - 0x00de8dd0 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ - 0x00de8de0 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ - 0x00de8df0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00de8e00 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00de8e10 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ - 0x00de8e20 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00de8e30 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00de8e40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de8e50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de8e60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de8e70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de8e80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de8e90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de8ea0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de8eb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de8ec0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de8ed0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de8ee0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de8ef0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de8f00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de8f10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de8f20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de8f30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de8f40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de8f50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de8f60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de8f70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de8f80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de8f90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00de8fa0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00de8fb0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00de8fc0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00de8fd0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00de8fe0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00de8ff0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00de9000 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00de9010 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00de9020 69666f72 6d207665 63342075 5f726f75 iform vec4 u_rou │ │ │ │ - 0x00de9030 74655061 72616d73 3b200a20 20756e69 teParams; . uni │ │ │ │ - 0x00de9040 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00de9050 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00de9060 63342075 5f6d6173 6b436f6c 6f723b20 c4 u_maskColor; │ │ │ │ - 0x00de9070 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00de9080 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00de9090 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00de90a0 755f6661 6b65436f 6c6f723b 200a2020 u_fakeColor; . │ │ │ │ - 0x00de90b0 756e6966 6f726d20 76656334 20755f66 uniform vec4 u_f │ │ │ │ - 0x00de90c0 616b654f 75746c69 6e65436f 6c6f723b akeOutlineColor; │ │ │ │ - 0x00de90d0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00de90e0 20755f66 616b6542 6f726465 72733b20 u_fakeBorders; │ │ │ │ - 0x00de90f0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00de9100 755f7061 74746572 6e3b200a 2020756e u_pattern; . un │ │ │ │ - 0x00de9110 69666f72 6d207665 63322075 5f616e67 iform vec2 u_ang │ │ │ │ - 0x00de9120 6c65436f 7353696e 3b200a20 20756e69 leCosSin; . uni │ │ │ │ - 0x00de9130 666f726d 20666c6f 61742075 5f617272 form float u_arr │ │ │ │ - 0x00de9140 6f774861 6c665769 6474683b 200a2020 owHalfWidth; . │ │ │ │ - 0x00de9150 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00de9160 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00de9170 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00de9180 636f6c6f 72546578 3b200a20 20636f6e colorTex; . con │ │ │ │ - 0x00de9190 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00de91a0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00de91b0 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ - 0x00de91c0 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ - 0x00de91d0 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ - 0x00de91e0 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ - 0x00de91f0 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ - 0x00de9200 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ - 0x00de9210 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ - 0x00de9220 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ - 0x00de9230 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ - 0x00de9240 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ - 0x00de9250 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ - 0x00de9260 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ - 0x00de9270 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ - 0x00de9280 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ - 0x00de9290 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ - 0x00de92a0 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ - 0x00de92b0 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ - 0x00de92c0 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ - 0x00de92d0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00de92e0 20202076 65633420 66696e61 6c436f6c vec4 finalCol │ │ │ │ - 0x00de92f0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00de9300 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ - 0x00de9310 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ - 0x00de9320 2066696e 616c436f 6c6f722e 61202a3d finalColor.a *= │ │ │ │ - 0x00de9330 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ - 0x00de9340 20696620 2866696e 616c436f 6c6f722e if (finalColor. │ │ │ │ - 0x00de9350 61203c20 302e3031 29200a20 20202020 a < 0.01) . │ │ │ │ - 0x00de9360 20646973 63617264 3b200a20 20202066 discard; . f │ │ │ │ - 0x00de9370 696e616c 436f6c6f 72203d20 76656334 inalColor = vec4 │ │ │ │ - 0x00de9380 286d6978 2866696e 616c436f 6c6f722e (mix(finalColor. │ │ │ │ - 0x00de9390 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ - 0x00de93a0 2e726762 2c20755f 6d61736b 436f6c6f .rgb, u_maskColo │ │ │ │ - 0x00de93b0 722e6129 2c206669 6e616c43 6f6c6f72 r.a), finalColor │ │ │ │ - 0x00de93c0 2e61293b 200a2020 2020765f 46726167 .a); . v_Frag │ │ │ │ - 0x00de93d0 436f6c6f 72203d20 66696e61 6c436f6c Color = finalCol │ │ │ │ - 0x00de93e0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00de93f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de9400 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de9410 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de9420 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de9430 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de9440 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de9450 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de9460 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de9470 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de9480 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de9490 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de94a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de94b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00de94c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00de94d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00de94e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00de94f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00de9500 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00de9510 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00de9520 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00de9530 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00de9540 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00de9550 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00de9560 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00de9570 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00de9580 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00de9590 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00de95a0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00de95b0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00de95c0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00de95d0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00de95e0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00de95f0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00de9600 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00de9610 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ - 0x00de9620 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ - 0x00de9630 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ - 0x00de9640 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00de9650 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ - 0x00de9660 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00de9670 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00de9680 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00de9690 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ - 0x00de96a0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00de96b0 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ - 0x00de96c0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00de96d0 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ - 0x00de96e0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00de96f0 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ - 0x00de9700 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ - 0x00de9710 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ - 0x00de9720 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ - 0x00de9730 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ - 0x00de9740 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00de9750 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ - 0x00de9760 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00de9770 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00de9780 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00de9790 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00de97a0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00de97b0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00de97c0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00de97d0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00de97e0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00de97f0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00de9800 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00de9810 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00de9820 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00de9830 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00de9840 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00de9850 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00de9860 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00de9870 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00de9880 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00de9890 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00de98a0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00de98b0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00de98c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00de98d0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00de98e0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00de98f0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00de9900 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00de9910 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00de9920 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00de9930 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00de9940 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00de9950 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00de9960 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00de9970 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00de9980 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00de9990 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00de99a0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00de99b0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00de99c0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00de99d0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00de99e0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00de99f0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00de9a00 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00de9a10 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00de9a20 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00de9a30 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00de9a40 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00de9a50 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00de9a60 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00de9a70 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00de9a80 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00de9a90 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00de9aa0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00de9ab0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00de9ac0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00de9ad0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00de9ae0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00de9af0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00de9b00 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00de9b10 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00de9b20 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00de9b30 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00de9b40 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00de9b50 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00de9b60 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00de9b70 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00de9b80 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00de9b90 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00de9ba0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00de9bb0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00de9bc0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00de9bd0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00de9be0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00de9bf0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00de9c00 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00de9c10 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00de9c20 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00de9c30 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00de9c40 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00de9c50 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00de9c60 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00de9c70 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00de9c80 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00de9c90 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00de9ca0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00de9cb0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00de9cc0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00de9cd0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00de9ce0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00de9cf0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00de9d00 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00de9d10 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00de9d20 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00de9d30 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00de9d40 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00de9d50 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ - 0x00de9d60 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ - 0x00de9d70 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ - 0x00de9d80 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ - 0x00de9d90 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ - 0x00de9da0 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ - 0x00de9db0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00de9dc0 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ - 0x00de9dd0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00de9de0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00de9df0 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ - 0x00de9e00 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ - 0x00de9e10 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de9e20 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de9e30 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00de9e40 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ - 0x00de9e50 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ - 0x00de9e60 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ - 0x00de9e70 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00de9e80 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00de9e90 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00de9ea0 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00de9eb0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00de9ec0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00de9ed0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00de9ee0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00de9ef0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00de9f00 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00de9f10 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00de9f20 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00de9f30 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00de9f40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00de9f50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00de9f60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00de9f70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00de9f80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00de9f90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00de9fa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00de9fb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00de9fc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00de9fd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00de9fe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00de9ff0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dea000 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dea010 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dea020 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dea030 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dea040 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dea050 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dea060 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dea070 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dea080 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dea090 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ - 0x00dea0a0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00dea0b0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00dea0c0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00dea0d0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00dea0e0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00dea0f0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00dea100 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00dea110 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00dea120 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00dea130 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00dea140 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00dea150 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00dea160 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00dea170 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00dea180 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00dea190 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00dea1a0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00dea1b0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00dea1c0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00dea1d0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00dea1e0 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00dea1f0 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00dea200 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00dea210 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00dea220 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00dea230 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00dea240 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00dea250 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00dea260 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00dea270 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00dea280 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00dea290 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ - 0x00dea2a0 323b200a 2020666c 6f617420 616c7068 2; . float alph │ │ │ │ - 0x00dea2b0 6146726f 6d506174 7465726e 28666c6f aFromPattern(flo │ │ │ │ - 0x00dea2c0 61742063 75724c65 6e2c2066 6c6f6174 at curLen, float │ │ │ │ - 0x00dea2d0 20646173 684c656e 2c20666c 6f617420 dashLen, float │ │ │ │ - 0x00dea2e0 6761704c 656e2920 0a20207b 200a2020 gapLen) . { . │ │ │ │ - 0x00dea2f0 2020666c 6f617420 6c656e20 3d206461 float len = da │ │ │ │ - 0x00dea300 73684c65 6e202b20 6761704c 656e3b20 shLen + gapLen; │ │ │ │ - 0x00dea310 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ - 0x00dea320 74203d20 66726163 74286375 724c656e t = fract(curLen │ │ │ │ - 0x00dea330 202f206c 656e2920 2a206c65 6e3b200a / len) * len; . │ │ │ │ - 0x00dea340 20202020 72657475 726e2073 74657028 return step( │ │ │ │ - 0x00dea350 6f666673 65742c20 64617368 4c656e29 offset, dashLen) │ │ │ │ - 0x00dea360 3b200a20 207d200a 2020636f 6e737420 ; . } . const │ │ │ │ - 0x00dea370 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00dea380 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00dea390 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ - 0x00dea3a0 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ - 0x00dea3b0 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ - 0x00dea3c0 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ - 0x00dea3d0 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ - 0x00dea3e0 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ - 0x00dea3f0 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ - 0x00dea400 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ - 0x00dea410 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ - 0x00dea420 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ - 0x00dea430 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ - 0x00dea440 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ - 0x00dea450 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ - 0x00dea460 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ - 0x00dea470 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ - 0x00dea480 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ - 0x00dea490 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ - 0x00dea4a0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00dea4b0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00dea4c0 69662028 765f6c65 6e677468 2e78203c if (v_length.x < │ │ │ │ - 0x00dea4d0 20765f6c 656e6774 682e7a29 200a2020 v_length.z) . │ │ │ │ - 0x00dea4e0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ - 0x00dea4f0 20207665 63322063 6f656673 203d2073 vec2 coefs = s │ │ │ │ - 0x00dea500 74657028 765f6c65 6e677468 2e78782c tep(v_length.xx, │ │ │ │ - 0x00dea510 20755f66 616b6542 6f726465 7273293b u_fakeBorders); │ │ │ │ - 0x00dea520 200a2020 2020636f 6566732e 79203d20 . coefs.y = │ │ │ │ - 0x00dea530 312e3020 2d20636f 6566732e 793b200a 1.0 - coefs.y; . │ │ │ │ - 0x00dea540 20202020 76656334 206d6169 6e436f6c vec4 mainCol │ │ │ │ - 0x00dea550 6f72203d 206d6978 28755f63 6f6c6f72 or = mix(u_color │ │ │ │ - 0x00dea560 2c20755f 66616b65 436f6c6f 722c2063 , u_fakeColor, c │ │ │ │ - 0x00dea570 6f656673 2e78293b 200a2020 20206d61 oefs.x); . ma │ │ │ │ - 0x00dea580 696e436f 6c6f7220 3d206d69 78286d61 inColor = mix(ma │ │ │ │ - 0x00dea590 696e436f 6c6f722c 20755f66 616b6543 inColor, u_fakeC │ │ │ │ - 0x00dea5a0 6f6c6f72 2c20636f 6566732e 79293b20 olor, coefs.y); │ │ │ │ - 0x00dea5b0 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ - 0x00dea5c0 3d206d61 696e436f 6c6f7220 2b20765f = mainColor + v_ │ │ │ │ - 0x00dea5d0 636f6c6f 723b200a 20202020 636f6c6f color; . colo │ │ │ │ - 0x00dea5e0 722e6120 2a3d2028 312e3020 2d20736d r.a *= (1.0 - sm │ │ │ │ - 0x00dea5f0 6f6f7468 73746570 286b416e 7469616c oothstep(kAntial │ │ │ │ - 0x00dea600 69617369 6e675468 72657368 6f6c642c iasingThreshold, │ │ │ │ - 0x00dea610 20312e30 2c206162 7328765f 6c656e67 1.0, abs(v_leng │ │ │ │ - 0x00dea620 74682e79 29292920 2a200a20 20202020 th.y))) * . │ │ │ │ - 0x00dea630 20202020 20202020 20202061 6c706861 alpha │ │ │ │ - 0x00dea640 46726f6d 50617474 65726e28 765f6c65 FromPattern(v_le │ │ │ │ - 0x00dea650 6e677468 2e782c20 755f7061 74746572 ngth.x, u_patter │ │ │ │ - 0x00dea660 6e2e782c 20755f70 61747465 726e2e79 n.x, u_pattern.y │ │ │ │ - 0x00dea670 293b200a 20202020 636f6c6f 72203d20 ); . color = │ │ │ │ - 0x00dea680 76656334 286d6978 28636f6c 6f722e72 vec4(mix(color.r │ │ │ │ - 0x00dea690 67622c20 755f6d61 736b436f 6c6f722e gb, u_maskColor. │ │ │ │ - 0x00dea6a0 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ - 0x00dea6b0 2e61292c 20636f6c 6f722e61 293b200a .a), color.a); . │ │ │ │ - 0x00dea6c0 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ - 0x00dea6d0 3d20636f 6c6f723b 200a2020 7d200a00 = color; . } .. │ │ │ │ - 0x00dea6e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dea6f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dea700 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dea710 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dea720 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dea730 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dea740 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dea750 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dea760 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dea770 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dea780 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dea790 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dea7a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dea7b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dea7c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dea7d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dea7e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dea7f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dea800 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dea810 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dea820 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dea830 63342076 5f726164 6975733b 200a2020 c4 v_radius; . │ │ │ │ - 0x00dea840 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00dea850 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00dea860 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00dea870 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00dea880 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00dea890 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00dea8a0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00dea8b0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00dea8c0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00dea8d0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00dea8e0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00dea8f0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00dea900 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00dea910 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00dea920 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00dea930 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00dea940 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00dea950 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00dea960 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00dea970 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00dea980 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00dea990 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00dea9a0 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00dea9b0 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00dea9c0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00dea9d0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00dea9e0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00dea9f0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00deaa00 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00deaa10 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00deaa20 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00deaa30 67506978 656c7343 6f756e74 203d2032 gPixelsCount = 2 │ │ │ │ - 0x00deaa40 2e353b20 0a202063 6f6e7374 20666c6f .5; . const flo │ │ │ │ - 0x00deaa50 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00deaa60 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00deaa70 20204c4f 575f5020 76656333 204d6f64 LOW_P vec3 Mod │ │ │ │ - 0x00deaa80 756c6174 65427950 61747465 726e446f ulateByPatternDo │ │ │ │ - 0x00deaa90 7473284c 4f575f50 20766563 3320636f ts(LOW_P vec3 co │ │ │ │ - 0x00deaaa0 6c6f722c 20666c6f 61742064 61726b65 lor, float darke │ │ │ │ - 0x00deaab0 6e2c2066 6c6f6174 20636f76 65726167 n, float coverag │ │ │ │ - 0x00deaac0 6529200a 20207b20 0a202020 20636f6e e) . { . con │ │ │ │ - 0x00deaad0 73742066 6c6f6174 206b4c69 67687465 st float kLighte │ │ │ │ - 0x00deaae0 6e203d20 302e3037 353b200a 20202020 n = 0.075; . │ │ │ │ - 0x00deaaf0 69662028 646f7428 636f6c6f 722c2076 if (dot(color, v │ │ │ │ - 0x00deab00 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ - 0x00deab10 35322c20 302e3037 32322929 203c2030 52, 0.0722)) < 0 │ │ │ │ - 0x00deab20 2e352920 0a202020 20202072 65747572 .5) . retur │ │ │ │ - 0x00deab30 6e20636f 6c6f7220 2b20636f 76657261 n color + covera │ │ │ │ - 0x00deab40 6765202a 206b4c69 67687465 6e3b200a ge * kLighten; . │ │ │ │ - 0x00deab50 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00deab60 202a206d 69782831 2e302c20 6461726b * mix(1.0, dark │ │ │ │ - 0x00deab70 656e2c20 636f7665 72616765 293b200a en, coverage); . │ │ │ │ - 0x00deab80 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00deab90 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00deaba0 34206669 6e616c43 6f6c6f72 203d2076 4 finalColor = v │ │ │ │ - 0x00deabb0 5f636f6c 6f723b20 0a202020 20666c6f _color; . flo │ │ │ │ - 0x00deabc0 61742061 61526164 69757320 3d206d61 at aaRadius = ma │ │ │ │ - 0x00deabd0 7828765f 72616469 75732e7a 202d206b x(v_radius.z - k │ │ │ │ - 0x00deabe0 416e7469 616c6961 73696e67 50697865 AntialiasingPixe │ │ │ │ - 0x00deabf0 6c73436f 756e742c 20302e30 293b200a lsCount, 0.0); . │ │ │ │ - 0x00deac00 20202020 666c6f61 74207374 65705661 float stepVa │ │ │ │ - 0x00deac10 6c756520 3d20736d 6f6f7468 73746570 lue = smoothstep │ │ │ │ - 0x00deac20 28616152 61646975 73202a20 61615261 (aaRadius * aaRa │ │ │ │ - 0x00deac30 64697573 2c20765f 72616469 75732e7a dius, v_radius.z │ │ │ │ - 0x00deac40 202a2076 5f726164 6975732e 7a2c200a * v_radius.z, . │ │ │ │ - 0x00deac50 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00deac60 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00deac70 20646f74 28765f72 61646975 732e7879 dot(v_radius.xy │ │ │ │ - 0x00deac80 2c20765f 72616469 75732e78 7929293b , v_radius.xy)); │ │ │ │ - 0x00deac90 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ - 0x00deaca0 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ - 0x00deacb0 61202a20 755f6f70 61636974 79202a20 a * u_opacity * │ │ │ │ - 0x00deacc0 28312e30 202d2073 74657056 616c7565 (1.0 - stepValue │ │ │ │ - 0x00deacd0 293b200a 20202020 69662028 66696e61 ); . if (fina │ │ │ │ - 0x00deace0 6c436f6c 6f722e61 203c2030 2e303120 lColor.a < 0.01 │ │ │ │ - 0x00deacf0 7c7c2075 5f726f75 74655061 72616d73 || u_routeParams │ │ │ │ - 0x00dead00 2e79203e 20765f72 61646975 732e7729 .y > v_radius.w) │ │ │ │ - 0x00dead10 200a2020 20202020 64697363 6172643b . discard; │ │ │ │ - 0x00dead20 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ - 0x00dead30 203d2076 65633428 6d697828 66696e61 = vec4(mix(fina │ │ │ │ - 0x00dead40 6c436f6c 6f722e72 67622c20 755f6d61 lColor.rgb, u_ma │ │ │ │ - 0x00dead50 736b436f 6c6f722e 7267622c 20755f6d skColor.rgb, u_m │ │ │ │ - 0x00dead60 61736b43 6f6c6f72 2e61292c 2066696e askColor.a), fin │ │ │ │ - 0x00dead70 616c436f 6c6f722e 61293b20 0a202020 alColor.a); . │ │ │ │ - 0x00dead80 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ - 0x00dead90 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ - 0x00deada0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00deadb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00deadc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00deadd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00deade0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00deadf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00deae00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00deae10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00deae20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00deae30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00deae40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00deae50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00deae60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00deae70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00deae80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00deae90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00deaea0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00deaeb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00deaec0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00deaed0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00deaee0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00deaef0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00deaf00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00deaf10 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00deaf20 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00deaf30 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00deaf40 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00deaf50 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ - 0x00deaf60 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00deaf70 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00deaf80 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00deaf90 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00deafa0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00deafb0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00deafc0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00deafd0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00deafe0 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ - 0x00deaff0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00deb000 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00deb010 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ - 0x00deb020 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00deb030 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ - 0x00deb040 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00deb050 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ - 0x00deb060 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00deb070 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ - 0x00deb080 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00deb090 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ - 0x00deb0a0 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ - 0x00deb0b0 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ - 0x00deb0c0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00deb0d0 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ - 0x00deb0e0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00deb0f0 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ - 0x00deb100 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00deb110 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00deb120 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00deb130 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00deb140 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00deb150 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00deb160 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00deb170 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00deb180 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00deb190 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00deb1a0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00deb1b0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00deb1c0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00deb1d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00deb1e0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00deb1f0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00deb200 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00deb210 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00deb220 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00deb230 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00deb240 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00deb250 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00deb260 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00deb270 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00deb280 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00deb290 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00deb2a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00deb2b0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00deb2c0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00deb2d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00deb2e0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00deb2f0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00deb300 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00deb310 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00deb320 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00deb330 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00deb340 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00deb350 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00deb360 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00deb370 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00deb380 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00deb390 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00deb3a0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00deb3b0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00deb3c0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00deb3d0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00deb3e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00deb3f0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00deb400 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00deb410 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00deb420 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00deb430 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00deb440 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00deb450 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00deb460 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00deb470 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00deb480 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00deb490 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00deb4a0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00deb4b0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00deb4c0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00deb4d0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00deb4e0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00deb4f0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00deb500 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00deb510 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00deb520 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00deb530 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00deb540 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00deb550 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00deb560 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00deb570 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00deb580 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00deb590 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00deb5a0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00deb5b0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00deb5c0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00deb5d0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00deb5e0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00deb5f0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00deb600 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00deb610 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00deb620 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00deb630 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00deb640 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00deb650 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00deb660 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00deb670 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00deb680 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00deb690 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00deb6a0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00deb6b0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00deb6c0 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ - 0x00deb6d0 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ - 0x00deb6e0 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00deb6f0 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ - 0x00deb700 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ - 0x00deb710 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ - 0x00deb720 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ - 0x00deb730 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ - 0x00deb740 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00deb750 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ - 0x00deb760 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ - 0x00deb770 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ - 0x00deb780 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ - 0x00deb790 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ - 0x00deb7a0 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ - 0x00deb7b0 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ - 0x00deb7c0 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ - 0x00deb7d0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00deb7e0 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ - 0x00deb7f0 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ - 0x00deb800 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ - 0x00deb810 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ - 0x00deb820 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ - 0x00deb830 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ - 0x00deb840 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ - 0x00deb850 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00deb860 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00deb870 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00deb880 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00deb890 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00deb8a0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00deb8b0 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ - 0x00deb8c0 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ - 0x00deb8d0 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ - 0x00deb8e0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00deb8f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00deb900 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00deb910 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00deb920 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00deb930 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00deb940 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00deb950 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00deb960 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00deb970 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00deb980 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00deb990 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00deb9a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00deb9b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00deb9c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00deb9d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00deb9e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00deb9f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00deba00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00deba10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00deba20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00deba30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00deba40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00deba50 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00deba60 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00deba70 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00deba80 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00deba90 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00debaa0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00debab0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00debac0 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ - 0x00debad0 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ - 0x00debae0 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ - 0x00debaf0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00debb00 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00debb10 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ - 0x00debb20 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00debb30 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00debb40 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ - 0x00debb50 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00debb60 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ - 0x00debb70 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00debb80 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00debb90 203d2031 3030302e 303b200a 20204c4f = 1000.0; . LO │ │ │ │ - 0x00debba0 575f5020 76656333 204d6f64 756c6174 W_P vec3 Modulat │ │ │ │ - 0x00debbb0 65427950 61747465 726e446f 7473284c eByPatternDots(L │ │ │ │ - 0x00debbc0 4f575f50 20766563 3320636f 6c6f722c OW_P vec3 color, │ │ │ │ - 0x00debbd0 20666c6f 61742064 61726b65 6e2c2066 float darken, f │ │ │ │ - 0x00debbe0 6c6f6174 20636f76 65726167 6529200a loat coverage) . │ │ │ │ - 0x00debbf0 20207b20 0a202020 20636f6e 73742066 { . const f │ │ │ │ - 0x00debc00 6c6f6174 206b4c69 67687465 6e203d20 loat kLighten = │ │ │ │ - 0x00debc10 302e3037 353b200a 20202020 69662028 0.075; . if ( │ │ │ │ - 0x00debc20 646f7428 636f6c6f 722c2076 65633328 dot(color, vec3( │ │ │ │ - 0x00debc30 302e3231 32362c20 302e3731 35322c20 0.2126, 0.7152, │ │ │ │ - 0x00debc40 302e3037 32322929 203c2030 2e352920 0.0722)) < 0.5) │ │ │ │ - 0x00debc50 0a202020 20202072 65747572 6e20636f . return co │ │ │ │ - 0x00debc60 6c6f7220 2b20636f 76657261 6765202a lor + coverage * │ │ │ │ - 0x00debc70 206b4c69 67687465 6e3b200a 20202020 kLighten; . │ │ │ │ - 0x00debc80 72657475 726e2063 6f6c6f72 202a206d return color * m │ │ │ │ - 0x00debc90 69782831 2e302c20 6461726b 656e2c20 ix(1.0, darken, │ │ │ │ - 0x00debca0 636f7665 72616765 293b200a 20207d20 coverage); . } │ │ │ │ - 0x00debcb0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00debcc0 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ - 0x00debcd0 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ - 0x00debce0 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ - 0x00debcf0 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ - 0x00debd00 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ - 0x00debd10 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ - 0x00debd20 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00debd30 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ - 0x00debd40 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00debd50 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00debd60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00debd70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00debd80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00debd90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00debda0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00debdb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00debdc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00debdd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00debde0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00debdf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00debe00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00debe10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00debe20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00debe30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00debe40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00debe50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00debe60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00debe70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00debe80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00debe90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00debea0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00debeb0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00debec0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00debed0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00debee0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00debef0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00debf00 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00debf10 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00debf20 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00debf30 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00debf40 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00debf50 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00debf60 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00debf70 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ - 0x00debf80 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00debf90 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00debfa0 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ - 0x00debfb0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00debfc0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ - 0x00debfd0 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ - 0x00debfe0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00debff0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00dec000 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00dec010 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00dec020 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00dec030 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00dec040 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00dec050 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00dec060 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00dec070 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00dec080 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00dec090 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00dec0a0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00dec0b0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00dec0c0 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00dec0d0 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00dec0e0 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00dec0f0 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00dec100 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00dec110 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00dec120 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00dec130 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00dec140 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00dec150 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00dec160 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00dec170 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00dec180 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00dec190 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00dec1a0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00dec1b0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00dec1c0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00dec1d0 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00dec1e0 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00dec1f0 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00dec200 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00dec210 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00dec220 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00dec230 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00dec240 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00dec250 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00dec260 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00dec270 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00dec280 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00dec290 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00dec2a0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00dec2b0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00dec2c0 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00dec2d0 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00dec2e0 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00dec2f0 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00dec300 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00dec310 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00dec320 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00dec330 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00dec340 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dec350 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00dec360 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00dec370 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00dec380 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00dec390 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00dec3a0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00dec3b0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00dec3c0 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00dec3d0 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00dec3e0 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00dec3f0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00dec400 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00dec410 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00dec420 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00dec430 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00dec440 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00dec450 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00dec460 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00dec470 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00dec480 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00dec490 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00dec4a0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00dec4b0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00dec4c0 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00dec4d0 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00dec4e0 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00dec4f0 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00dec500 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00dec510 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00dec520 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00dec530 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00dec540 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00dec550 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00dec560 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00dec570 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00dec580 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00dec590 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00dec5a0 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ - 0x00dec5b0 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ - 0x00dec5c0 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ - 0x00dec5d0 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ - 0x00dec5e0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00dec5f0 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00dec600 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00dec610 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00dec620 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00dec630 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ - 0x00dec640 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00dec650 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ - 0x00dec660 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ - 0x00dec670 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00dec680 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00dec690 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dec6a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dec6b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dec6c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dec6d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dec6e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dec6f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dec700 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dec710 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dec720 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dec730 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dec740 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dec750 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dec760 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dec770 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dec780 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dec790 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dec7a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dec7b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dec7c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dec7d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dec7e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dec7f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00dec800 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00dec810 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00dec820 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00dec830 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00dec840 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00dec850 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ - 0x00dec860 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00dec870 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00dec880 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ - 0x00dec890 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ - 0x00dec8a0 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ - 0x00dec8b0 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ - 0x00dec8c0 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ - 0x00dec8d0 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ - 0x00dec8e0 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ - 0x00dec8f0 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ - 0x00dec900 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ - 0x00dec910 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ - 0x00dec920 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ - 0x00dec930 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ - 0x00dec940 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ - 0x00dec950 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ - 0x00dec960 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ - 0x00dec970 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ - 0x00dec980 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ - 0x00dec990 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ - 0x00dec9a0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00dec9b0 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ - 0x00dec9c0 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ - 0x00dec9d0 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ - 0x00dec9e0 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ - 0x00dec9f0 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ - 0x00deca00 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ - 0x00deca10 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00deca20 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00deca30 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00deca40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00deca50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00deca60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00deca70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00deca80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00deca90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00decaa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00decab0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00decac0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00decad0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00decae0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00decaf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00decb00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00decb10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00decb20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00decb30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00decb40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00decb50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00decb60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00decb70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00decb80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00decb90 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00decba0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00decbb0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00decbc0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00decbd0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00decbe0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00decbf0 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ - 0x00decc00 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00decc10 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00decc20 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00decc30 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00decc40 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ - 0x00decc50 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00decc60 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ - 0x00decc70 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ - 0x00decc80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00decc90 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00decca0 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ - 0x00deccb0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00deccc0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00deccd0 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ - 0x00decce0 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ - 0x00deccf0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00decd00 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ - 0x00decd10 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ - 0x00decd20 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ - 0x00decd30 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ - 0x00decd40 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ - 0x00decd50 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00decd60 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ - 0x00decd70 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ - 0x00decd80 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00decd90 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ - 0x00decda0 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ - 0x00decdb0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00decdc0 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ - 0x00decdd0 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ - 0x00decde0 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ - 0x00decdf0 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ - 0x00dece00 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00dece10 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00dece20 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00dece30 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ - 0x00dece40 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ - 0x00dece50 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ - 0x00dece60 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ - 0x00dece70 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00dece80 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ - 0x00dece90 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00decea0 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ - 0x00deceb0 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ - 0x00decec0 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ - 0x00deced0 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ - 0x00decee0 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ - 0x00decef0 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ - 0x00decf00 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ - 0x00decf10 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ - 0x00decf20 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ - 0x00decf30 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00decf40 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ - 0x00decf50 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ - 0x00decf60 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ - 0x00decf70 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00decf80 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00decf90 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ - 0x00decfa0 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ - 0x00decfb0 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ - 0x00decfc0 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ - 0x00decfd0 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ - 0x00decfe0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00decff0 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ - 0x00ded000 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ - 0x00ded010 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00ded020 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ - 0x00ded030 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ - 0x00ded040 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ - 0x00ded050 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ - 0x00ded060 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ - 0x00ded070 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00ded080 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ - 0x00ded090 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00ded0a0 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ - 0x00ded0b0 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ - 0x00ded0c0 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ - 0x00ded0d0 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ - 0x00ded0e0 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ - 0x00ded0f0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00ded100 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ - 0x00ded110 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ - 0x00ded120 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ - 0x00ded130 7365200a 20202020 20207265 7475726e se . return │ │ │ │ - 0x00ded140 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00ded150 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00ded160 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00ded170 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00ded180 203d2061 5f74636f 6f72643b 200a2020 = a_tcoord; . │ │ │ │ - 0x00ded190 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00ded1a0 76656334 28615f70 6f732c20 302e302c vec4(a_pos, 0.0, │ │ │ │ - 0x00ded1b0 20312e30 293b200a 20207d20 0a000000 1.0); . } .... │ │ │ │ - 0x00ded1c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ded1d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ded1e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ded1f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ded200 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ded210 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ded220 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ded230 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ded240 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ded250 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ded260 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ded270 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ded280 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ded290 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ded2a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ded2b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ded2c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ded2d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ded2e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ded2f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ded300 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00ded310 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00ded320 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00ded330 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00ded340 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00ded350 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00ded360 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00ded370 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00ded380 23656e64 6966200a 2020696e 20666c6f #endif . in flo │ │ │ │ - 0x00ded390 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ - 0x00ded3a0 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ - 0x00ded3b0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00ded3c0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00ded3d0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00ded3e0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00ded3f0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00ded400 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00ded410 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00ded420 65633420 755f706f 73697469 6f6e3b20 ec4 u_position; │ │ │ │ - 0x00ded430 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00ded440 755f6c69 6e655061 72616d73 3b200a20 u_lineParams; . │ │ │ │ - 0x00ded450 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00ded460 5f616363 75726163 793b200a 2020756e _accuracy; . un │ │ │ │ - 0x00ded470 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00ded480 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00ded490 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00ded4a0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ded4b0 61742075 5f617a69 6d75743b 200a2020 at u_azimut; . │ │ │ │ - 0x00ded4c0 636f6e73 7420666c 6f617420 6b416e74 const float kAnt │ │ │ │ - 0x00ded4d0 69616c69 6173696e 67546872 6573686f ialiasingThresho │ │ │ │ - 0x00ded4e0 6c64203d 20302e39 323b200a 2020636f ld = 0.92; . co │ │ │ │ - 0x00ded4f0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00ded500 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00ded510 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ - 0x00ded520 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ - 0x00ded530 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ - 0x00ded540 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ - 0x00ded550 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ - 0x00ded560 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ - 0x00ded570 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ - 0x00ded580 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ - 0x00ded590 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ - 0x00ded5a0 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ - 0x00ded5b0 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ - 0x00ded5c0 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ - 0x00ded5d0 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ - 0x00ded5e0 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ - 0x00ded5f0 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ - 0x00ded600 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ - 0x00ded610 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ - 0x00ded620 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ - 0x00ded630 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00ded640 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ - 0x00ded650 56544620 0a202020 204c4f57 5f502076 VTF . LOW_P v │ │ │ │ - 0x00ded660 65633420 636f6c6f 72203d20 765f636f ec4 color = v_co │ │ │ │ - 0x00ded670 6c6f723b 200a2020 23656c73 65200a20 lor; . #else . │ │ │ │ - 0x00ded680 2020204c 4f575f50 20766563 3420636f LOW_P vec4 co │ │ │ │ - 0x00ded690 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ - 0x00ded6a0 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ - 0x00ded6b0 72546578 436f6f72 64293b20 0a202023 rTexCoord); . # │ │ │ │ - 0x00ded6c0 656e6469 66200a20 20202063 6f6c6f72 endif . color │ │ │ │ - 0x00ded6d0 2e61202a 3d20755f 6f706163 6974793b .a *= u_opacity; │ │ │ │ - 0x00ded6e0 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ - 0x00ded6f0 2028312e 30202d20 736d6f6f 74687374 (1.0 - smoothst │ │ │ │ - 0x00ded700 6570286b 416e7469 616c6961 73696e67 ep(kAntialiasing │ │ │ │ - 0x00ded710 54687265 73686f6c 642c2031 2e302c20 Threshold, 1.0, │ │ │ │ - 0x00ded720 61627328 765f6c65 6e677468 59292929 abs(v_lengthY))) │ │ │ │ - 0x00ded730 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00ded740 6f72203d 20636f6c 6f723b20 0a20207d or = color; . } │ │ │ │ - 0x00ded750 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00ded760 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ded770 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ded780 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ded790 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ded7a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ded7b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ded7c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ded7d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ded7e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ded7f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ded800 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ded810 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ded820 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ded830 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ded840 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ded850 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ded860 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ded870 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ded880 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ded890 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ded8a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ded8b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00ded8c0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00ded8d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00ded8e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00ded8f0 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ - 0x00ded900 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ - 0x00ded910 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ - 0x00ded920 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ - 0x00ded930 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ - 0x00ded940 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00ded950 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ - 0x00ded960 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ - 0x00ded970 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ - 0x00ded980 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00ded990 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00ded9a0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00ded9b0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00ded9c0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00ded9d0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00ded9e0 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ - 0x00ded9f0 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00deda00 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ - 0x00deda10 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ - 0x00deda20 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ - 0x00deda30 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00deda40 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00deda50 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00deda60 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00deda70 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ - 0x00deda80 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ - 0x00deda90 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ - 0x00dedaa0 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00dedab0 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ - 0x00dedac0 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ - 0x00dedad0 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ - 0x00dedae0 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ - 0x00dedaf0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00dedb00 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00dedb10 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00dedb20 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00dedb30 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00dedb40 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00dedb50 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00dedb60 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00dedb70 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00dedb80 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00dedb90 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00dedba0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00dedbb0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00dedbc0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00dedbd0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00dedbe0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00dedbf0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00dedc00 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00dedc10 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00dedc20 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00dedc30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dedc40 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00dedc50 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00dedc60 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00dedc70 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00dedc80 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00dedc90 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00dedca0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00dedcb0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00dedcc0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00dedcd0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00dedce0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00dedcf0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00dedd00 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00dedd10 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00dedd20 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00dedd30 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00dedd40 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00dedd50 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00dedd60 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00dedd70 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00dedd80 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00dedd90 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00dedda0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00deddb0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00deddc0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00deddd0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00dedde0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00deddf0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00dede00 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00dede10 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00dede20 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00dede30 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00dede40 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00dede50 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00dede60 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00dede70 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00dede80 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00dede90 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00dedea0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00dedeb0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00dedec0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00deded0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00dedee0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00dedef0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00dedf00 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00dedf10 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00dedf20 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00dedf30 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00dedf40 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00dedf50 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00dedf60 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00dedf70 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00dedf80 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00dedf90 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00dedfa0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00dedfb0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00dedfc0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00dedfd0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00dedfe0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00dedff0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00dee000 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00dee010 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00dee020 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00dee030 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00dee040 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00dee050 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00dee060 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00dee070 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00dee080 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00dee090 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00dee0a0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00dee0b0 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00dee0c0 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00dee0d0 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00dee0e0 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ - 0x00dee0f0 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ - 0x00dee100 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ - 0x00dee110 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ - 0x00dee120 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ - 0x00dee130 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00dee140 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00dee150 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ - 0x00dee160 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ - 0x00dee170 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ - 0x00dee180 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ - 0x00dee190 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00dee1a0 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ - 0x00dee1b0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00dee1c0 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ - 0x00dee1d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dee1e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dee1f0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dee200 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ - 0x00dee210 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ - 0x00dee220 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ - 0x00dee230 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ - 0x00dee240 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ - 0x00dee250 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00dee260 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ - 0x00dee270 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ - 0x00dee280 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ - 0x00dee290 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ - 0x00dee2a0 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ - 0x00dee2b0 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ - 0x00dee2c0 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ - 0x00dee2d0 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ - 0x00dee2e0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00dee2f0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00dee300 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00dee310 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00dee320 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ - 0x00dee330 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ - 0x00dee340 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ - 0x00dee350 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00dee360 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00dee370 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00dee380 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00dee390 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00dee3a0 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00dee3b0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00dee3c0 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00dee3d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dee3e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dee3f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dee400 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dee410 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dee420 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dee430 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dee440 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dee450 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dee460 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dee470 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dee480 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dee490 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dee4a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dee4b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dee4c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dee4d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dee4e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dee4f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dee500 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dee510 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dee520 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dee530 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ - 0x00dee540 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ - 0x00dee550 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ - 0x00dee560 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ - 0x00dee570 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ - 0x00dee580 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00dee590 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ - 0x00dee5a0 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ - 0x00dee5b0 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ - 0x00dee5c0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00dee5d0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00dee5e0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00dee5f0 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ - 0x00dee600 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00dee610 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ - 0x00dee620 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ - 0x00dee630 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ - 0x00dee640 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ - 0x00dee650 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ - 0x00dee660 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ - 0x00dee670 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ - 0x00dee680 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ - 0x00dee690 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ - 0x00dee6a0 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ - 0x00dee6b0 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ - 0x00dee6c0 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ - 0x00dee6d0 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ - 0x00dee6e0 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ - 0x00dee6f0 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ - 0x00dee700 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ - 0x00dee710 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ - 0x00dee720 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ - 0x00dee730 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00dee740 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ - 0x00dee750 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ - 0x00dee760 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ - 0x00dee770 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ - 0x00dee780 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ - 0x00dee790 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00dee7a0 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ - 0x00dee7b0 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ - 0x00dee7c0 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ - 0x00dee7d0 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ - 0x00dee7e0 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ - 0x00dee7f0 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ - 0x00dee800 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ - 0x00dee810 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ - 0x00dee820 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ - 0x00dee830 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ - 0x00dee840 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ - 0x00dee850 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ - 0x00dee860 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ - 0x00dee870 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ - 0x00dee880 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ - 0x00dee890 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ - 0x00dee8a0 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ - 0x00dee8b0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00dee8c0 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ - 0x00dee8d0 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ - 0x00dee8e0 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ - 0x00dee8f0 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ - 0x00dee900 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ - 0x00dee910 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ - 0x00dee920 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ - 0x00dee930 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ - 0x00dee940 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ - 0x00dee950 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ - 0x00dee960 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ - 0x00dee970 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ - 0x00dee980 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ - 0x00dee990 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ - 0x00dee9a0 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ - 0x00dee9b0 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ - 0x00dee9c0 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ - 0x00dee9d0 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ - 0x00dee9e0 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ - 0x00dee9f0 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ - 0x00deea00 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ - 0x00deea10 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ - 0x00deea20 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ - 0x00deea30 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ - 0x00deea40 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ - 0x00deea50 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ - 0x00deea60 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ - 0x00deea70 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00deea80 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00deea90 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00deeaa0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00deeab0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00deeac0 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ - 0x00deead0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00deeae0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00deeaf0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00deeb00 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00deeb10 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00deeb20 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00deeb30 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00deeb40 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00deeb50 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ - 0x00deeb60 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ - 0x00deeb70 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ - 0x00deeb80 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ - 0x00deeb90 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ - 0x00deeba0 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ - 0x00deebb0 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ - 0x00deebc0 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ - 0x00deebd0 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ - 0x00deebe0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00deebf0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00deec00 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00deec10 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00deec20 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ - 0x00deec30 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00deec40 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00deec50 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00deec60 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00deec70 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00deec80 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ - 0x00deec90 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00deeca0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00deecb0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00deecc0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00deecd0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00deece0 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00deecf0 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00deed00 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00deed10 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ - 0x00deed20 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ - 0x00deed30 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ - 0x00deed40 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ - 0x00deed50 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ - 0x00deed60 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ - 0x00deed70 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ - 0x00deed80 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ - 0x00deed90 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ - 0x00deeda0 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ - 0x00deedb0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00deedc0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00deedd0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00deede0 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ - 0x00deedf0 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ - 0x00deee00 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ - 0x00deee10 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ - 0x00deee20 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ - 0x00deee30 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ - 0x00deee40 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ - 0x00deee50 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ - 0x00deee60 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ - 0x00deee70 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ - 0x00deee80 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ - 0x00deee90 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ - 0x00deeea0 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ - 0x00deeeb0 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ - 0x00deeec0 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ - 0x00deeed0 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ - 0x00deeee0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00deeef0 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ - 0x00deef00 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ - 0x00deef10 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ - 0x00deef20 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ - 0x00deef30 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ - 0x00deef40 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ - 0x00deef50 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ - 0x00deef60 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00deef70 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ - 0x00deef80 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00deef90 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ - 0x00deefa0 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ - 0x00deefb0 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ - 0x00deefc0 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ - 0x00deefd0 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ - 0x00deefe0 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ - 0x00deeff0 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ - 0x00def000 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ - 0x00def010 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ - 0x00def020 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ - 0x00def030 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ - 0x00def040 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ - 0x00def050 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ - 0x00def060 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ - 0x00def070 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ - 0x00def080 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ - 0x00def090 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ - 0x00def0a0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00def0b0 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ - 0x00def0c0 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ - 0x00def0d0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ - 0x00def0e0 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ - 0x00def0f0 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ - 0x00def100 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ - 0x00def110 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ - 0x00def120 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ - 0x00def130 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ - 0x00def140 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ - 0x00def150 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ - 0x00def160 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ - 0x00def170 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ - 0x00def180 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ - 0x00def190 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ - 0x00def1a0 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ - 0x00def1b0 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ - 0x00def1c0 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ - 0x00def1d0 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ - 0x00def1e0 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ - 0x00def1f0 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ - 0x00def200 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ - 0x00def210 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ - 0x00def220 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ - 0x00def230 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ - 0x00def240 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ - 0x00def250 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ - 0x00def260 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00def270 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00def280 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ - 0x00def290 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ - 0x00def2a0 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ - 0x00def2b0 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ - 0x00def2c0 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ - 0x00def2d0 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ - 0x00def2e0 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ - 0x00def2f0 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ - 0x00def300 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ - 0x00def310 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ - 0x00def320 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ - 0x00def330 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ - 0x00def340 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ - 0x00def350 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ - 0x00def360 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ - 0x00def370 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ - 0x00def380 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ - 0x00def390 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ - 0x00def3a0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00def3b0 20202020 76656334 20776569 67687473 vec4 weights │ │ │ │ - 0x00def3c0 203d2076 65633428 302e302c 20302e30 = vec4(0.0, 0.0 │ │ │ │ - 0x00def3d0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00def3e0 20207665 63322065 203d2074 65787475 vec2 e = textu │ │ │ │ - 0x00def3f0 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ - 0x00def400 5f636f6f 7264732e 7879292e 72673b20 _coords.xy).rg; │ │ │ │ - 0x00def410 0a202020 20696620 28652e67 203e2030 . if (e.g > 0 │ │ │ │ - 0x00def420 2e302920 2f2f2045 64676520 6174206e .0) // Edge at n │ │ │ │ - 0x00def430 6f727468 200a2020 20207b20 0a202020 orth . { . │ │ │ │ - 0x00def440 20202076 65633220 643b200a 20202020 vec2 d; . │ │ │ │ - 0x00def450 20207665 63332063 6f6f7264 733b200a vec3 coords; . │ │ │ │ - 0x00def460 20202020 2020636f 6f726473 2e78203d coords.x = │ │ │ │ - 0x00def470 20534d41 41536561 72636858 4c656674 SMAASearchXLeft │ │ │ │ - 0x00def480 28765f6f 66667365 74302e78 792c2076 (v_offset0.xy, v │ │ │ │ - 0x00def490 5f6f6666 73657432 2e78293b 200a2020 _offset2.x); . │ │ │ │ - 0x00def4a0 20202020 636f6f72 64732e79 203d2076 coords.y = v │ │ │ │ - 0x00def4b0 5f6f6666 73657431 2e793b20 0a202020 _offset1.y; . │ │ │ │ - 0x00def4c0 20202064 2e78203d 20636f6f 7264732e d.x = coords. │ │ │ │ - 0x00def4d0 783b200a 20202020 2020666c 6f617420 x; . float │ │ │ │ - 0x00def4e0 6531203d 20534d41 4153616d 706c654c e1 = SMAASampleL │ │ │ │ - 0x00def4f0 6576656c 5a65726f 28755f63 6f6c6f72 evelZero(u_color │ │ │ │ - 0x00def500 5465782c 20636f6f 7264732e 7879292e Tex, coords.xy). │ │ │ │ - 0x00def510 723b200a 20202020 2020636f 6f726473 r; . coords │ │ │ │ - 0x00def520 2e7a203d 20534d41 41536561 72636858 .z = SMAASearchX │ │ │ │ - 0x00def530 52696768 7428765f 6f666673 6574302e Right(v_offset0. │ │ │ │ - 0x00def540 7a772c20 765f6f66 66736574 322e7929 zw, v_offset2.y) │ │ │ │ - 0x00def550 3b200a20 20202020 20642e79 203d2063 ; . d.y = c │ │ │ │ - 0x00def560 6f6f7264 732e7a3b 200a2020 20202020 oords.z; . │ │ │ │ - 0x00def570 76656332 207a7a20 3d20755f 6672616d vec2 zz = u_fram │ │ │ │ - 0x00def580 65627566 6665724d 65747269 63732e7a ebufferMetrics.z │ │ │ │ - 0x00def590 7a3b200a 20202020 20206420 3d206162 z; . d = ab │ │ │ │ - 0x00def5a0 7328534d 4141526f 756e6428 7a7a202a s(SMAARound(zz * │ │ │ │ - 0x00def5b0 2064202d 20765f63 6f6f7264 732e7a7a d - v_coords.zz │ │ │ │ - 0x00def5c0 29293b20 0a202020 20202076 65633220 )); . vec2 │ │ │ │ - 0x00def5d0 73717274 5f64203d 20737172 74286429 sqrt_d = sqrt(d) │ │ │ │ - 0x00def5e0 3b200a20 20202020 20666c6f 61742065 ; . float e │ │ │ │ - 0x00def5f0 32203d20 534d4141 53616d70 6c654c65 2 = SMAASampleLe │ │ │ │ - 0x00def600 76656c5a 65726f4f 66667365 7428755f velZeroOffset(u_ │ │ │ │ - 0x00def610 636f6c6f 72546578 2c20636f 6f726473 colorTex, coords │ │ │ │ - 0x00def620 2e7a792c 20534d41 414f6666 73657428 .zy, SMAAOffset( │ │ │ │ - 0x00def630 312c2030 29292e72 3b200a20 20202020 1, 0)).r; . │ │ │ │ - 0x00def640 20776569 67687473 2e726720 3d20534d weights.rg = SM │ │ │ │ - 0x00def650 41414172 65612873 7172745f 642c2065 AAArea(sqrt_d, e │ │ │ │ - 0x00def660 312c2065 32293b20 0a202020 207d200a 1, e2); . } . │ │ │ │ - 0x00def670 20202020 69662028 652e7220 3e20302e if (e.r > 0. │ │ │ │ - 0x00def680 3029202f 2f204564 67652061 74207765 0) // Edge at we │ │ │ │ - 0x00def690 7374200a 20202020 7b200a20 20202020 st . { . │ │ │ │ - 0x00def6a0 20766563 3220643b 200a2020 20202020 vec2 d; . │ │ │ │ - 0x00def6b0 76656333 20636f6f 7264733b 200a2020 vec3 coords; . │ │ │ │ - 0x00def6c0 20202020 636f6f72 64732e79 203d2053 coords.y = S │ │ │ │ - 0x00def6d0 4d414153 65617263 68595570 28765f6f MAASearchYUp(v_o │ │ │ │ - 0x00def6e0 66667365 74312e78 792c2076 5f6f6666 ffset1.xy, v_off │ │ │ │ - 0x00def6f0 73657432 2e7a293b 200a2020 20202020 set2.z); . │ │ │ │ - 0x00def700 636f6f72 64732e78 203d2076 5f6f6666 coords.x = v_off │ │ │ │ - 0x00def710 73657430 2e783b20 0a202020 20202064 set0.x; . d │ │ │ │ - 0x00def720 2e78203d 20636f6f 7264732e 793b200a .x = coords.y; . │ │ │ │ - 0x00def730 20202020 2020666c 6f617420 6531203d float e1 = │ │ │ │ - 0x00def740 20534d41 4153616d 706c654c 6576656c SMAASampleLevel │ │ │ │ - 0x00def750 5a65726f 28755f63 6f6c6f72 5465782c Zero(u_colorTex, │ │ │ │ - 0x00def760 20636f6f 7264732e 7879292e 673b200a coords.xy).g; . │ │ │ │ - 0x00def770 20202020 2020636f 6f726473 2e7a203d coords.z = │ │ │ │ - 0x00def780 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ - 0x00def790 28765f6f 66667365 74312e7a 772c2076 (v_offset1.zw, v │ │ │ │ - 0x00def7a0 5f6f6666 73657432 2e77293b 200a2020 _offset2.w); . │ │ │ │ - 0x00def7b0 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ - 0x00def7c0 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ - 0x00def7d0 7777203d 20755f66 72616d65 62756666 ww = u_framebuff │ │ │ │ - 0x00def7e0 65724d65 74726963 732e7777 3b200a20 erMetrics.ww; . │ │ │ │ - 0x00def7f0 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ - 0x00def800 41526f75 6e642877 77202a20 64202d20 ARound(ww * d - │ │ │ │ - 0x00def810 765f636f 6f726473 2e777729 293b200a v_coords.ww)); . │ │ │ │ - 0x00def820 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ - 0x00def830 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ - 0x00def840 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ - 0x00def850 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ - 0x00def860 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ - 0x00def870 5465782c 20636f6f 7264732e 787a2c20 Tex, coords.xz, │ │ │ │ - 0x00def880 534d4141 4f666673 65742830 2c203129 SMAAOffset(0, 1) │ │ │ │ - 0x00def890 292e673b 200a2020 20202020 77656967 ).g; . weig │ │ │ │ - 0x00def8a0 6874732e 6261203d 20534d41 41417265 hts.ba = SMAAAre │ │ │ │ - 0x00def8b0 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ - 0x00def8c0 293b200a 20202020 7d200a20 20202076 ); . } . v │ │ │ │ - 0x00def8d0 5f467261 67436f6c 6f72203d 20776569 _FragColor = wei │ │ │ │ - 0x00def8e0 67687473 3b200a20 207d200a 00000000 ghts; . } ..... │ │ │ │ - 0x00def8f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00def900 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00def910 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00def920 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00def930 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00def940 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00def950 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00def960 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00def970 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00def980 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00def990 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00def9a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00def9b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00def9c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00def9d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00def9e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00def9f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00defa00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00defa10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00defa20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00defa30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00defa40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00defa50 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00defa60 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00defa70 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ - 0x00defa80 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00defa90 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ - 0x00defaa0 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ - 0x00defab0 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ - 0x00defac0 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ - 0x00defad0 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ - 0x00defae0 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ - 0x00defaf0 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ - 0x00defb00 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ - 0x00defb10 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ - 0x00defb20 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ - 0x00defb30 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ - 0x00defb40 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00defb50 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ - 0x00defb60 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ - 0x00defb70 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ - 0x00defb80 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00defb90 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ - 0x00defba0 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00defbb0 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ - 0x00defbc0 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ - 0x00defbd0 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ - 0x00defbe0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00defbf0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00defc00 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00defc10 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00defc20 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00defc30 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00defc40 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00defc50 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00defc60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00defc70 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00defc80 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00defc90 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00defca0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00defcb0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00defcc0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00defcd0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00defce0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00defcf0 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00defd00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00defd10 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00defd20 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00defd30 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00defd40 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00defd50 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00defd60 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00defd70 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00defd80 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00defd90 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00defda0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00defdb0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00defdc0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00defdd0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00defde0 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00defdf0 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00defe00 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00defe10 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00defe20 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00defe30 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00defe40 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00defe50 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00defe60 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00defe70 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00defe80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00defe90 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00defea0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00defeb0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00defec0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00defed0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00defee0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00defef0 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00deff00 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00deff10 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00deff20 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00deff30 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00deff40 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00deff50 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00deff60 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00deff70 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00deff80 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00deff90 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00deffa0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00deffb0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00deffc0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00deffd0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00deffe0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00defff0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00df0000 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00df0010 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00df0020 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00df0030 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00df0040 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00df0050 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00df0060 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00df0070 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00df0080 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00df0090 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00df00a0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00df00b0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00df00c0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00df00d0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00df00e0 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00df00f0 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00df0100 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00df0110 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00df0120 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00df0130 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00df0140 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00df0150 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00df0160 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00df0170 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ - 0x00df0180 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ - 0x00df0190 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ - 0x00df01a0 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ - 0x00df01b0 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ - 0x00df01c0 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ - 0x00df01d0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00df01e0 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ - 0x00df01f0 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ - 0x00df0200 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ - 0x00df0210 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00df0220 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ - 0x00df0230 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00df0240 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ - 0x00df0250 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ - 0x00df0260 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ - 0x00df0270 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00df0280 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ - 0x00df0290 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00df02a0 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ - 0x00df02b0 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ - 0x00df02c0 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ - 0x00df02d0 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ - 0x00df02e0 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ - 0x00df02f0 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ - 0x00df0300 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00df0310 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df0320 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df0330 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df0340 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df0350 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df0360 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df0370 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df0380 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df0390 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df03a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df03b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df03c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df03d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df03e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df03f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df0400 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df0410 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df0420 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df0430 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df0440 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df0450 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df0460 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df0470 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df0480 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ - 0x00df0490 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ - 0x00df04a0 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ - 0x00df04b0 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ - 0x00df04c0 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ - 0x00df04d0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ - 0x00df04e0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00df04f0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00df0500 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00df0510 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ - 0x00df0520 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ - 0x00df0530 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ - 0x00df0540 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ - 0x00df0550 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ - 0x00df0560 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00df0570 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ - 0x00df0580 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ - 0x00df0590 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ - 0x00df05a0 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ - 0x00df05b0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ - 0x00df05c0 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ - 0x00df05d0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00df05e0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00df05f0 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ - 0x00df0600 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ - 0x00df0610 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ - 0x00df0620 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ - 0x00df0630 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ - 0x00df0640 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ - 0x00df0650 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ - 0x00df0660 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ - 0x00df0670 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ - 0x00df0680 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ - 0x00df0690 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ - 0x00df06a0 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ - 0x00df06b0 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00df06c0 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ - 0x00df06d0 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ - 0x00df06e0 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ - 0x00df06f0 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ - 0x00df0700 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ - 0x00df0710 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00df0720 200a2020 2020666c 6f617420 4c203d20 . float L = │ │ │ │ - 0x00df0730 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ - 0x00df0740 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ - 0x00df0750 6578436f 6f726473 292e7267 622c206b exCoords).rgb, k │ │ │ │ - 0x00df0760 57656967 68747329 3b200a20 20202066 Weights); . f │ │ │ │ - 0x00df0770 6c6f6174 204c6c65 6674203d 20646f74 loat Lleft = dot │ │ │ │ - 0x00df0780 28746578 74757265 28755f63 6f6c6f72 (texture(u_color │ │ │ │ - 0x00df0790 5465782c 20765f6f 66667365 74302e78 Tex, v_offset0.x │ │ │ │ - 0x00df07a0 79292e72 67622c20 6b576569 67687473 y).rgb, kWeights │ │ │ │ - 0x00df07b0 293b200a 20202020 666c6f61 74204c74 ); . float Lt │ │ │ │ - 0x00df07c0 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ - 0x00df07d0 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ - 0x00df07e0 66667365 74302e7a 77292e72 67622c20 ffset0.zw).rgb, │ │ │ │ - 0x00df07f0 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ - 0x00df0800 76656334 2064656c 74613b20 0a202020 vec4 delta; . │ │ │ │ - 0x00df0810 2064656c 74612e78 79203d20 61627328 delta.xy = abs( │ │ │ │ - 0x00df0820 4c202d20 76656332 284c6c65 66742c20 L - vec2(Lleft, │ │ │ │ - 0x00df0830 4c746f70 29293b20 0a202020 20766563 Ltop)); . vec │ │ │ │ - 0x00df0840 32206564 67657320 3d207374 6570286b 2 edges = step(k │ │ │ │ - 0x00df0850 54687265 73686f6c 642c2064 656c7461 Threshold, delta │ │ │ │ - 0x00df0860 2e787929 3b200a20 20202069 66202864 .xy); . if (d │ │ │ │ - 0x00df0870 6f742865 64676573 2c207665 63322831 ot(edges, vec2(1 │ │ │ │ - 0x00df0880 2e302c20 312e3029 29203d3d 20302e30 .0, 1.0)) == 0.0 │ │ │ │ - 0x00df0890 29200a20 20202020 20202064 69736361 ) . disca │ │ │ │ - 0x00df08a0 72643b20 0a202020 20666c6f 6174204c rd; . float L │ │ │ │ - 0x00df08b0 72696768 74203d20 646f7428 74657874 right = dot(text │ │ │ │ - 0x00df08c0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00df08d0 765f6f66 66736574 312e7879 292e7267 v_offset1.xy).rg │ │ │ │ - 0x00df08e0 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ - 0x00df08f0 20202066 6c6f6174 204c626f 74746f6d float Lbottom │ │ │ │ - 0x00df0900 20203d20 646f7428 74657874 75726528 = dot(texture( │ │ │ │ - 0x00df0910 755f636f 6c6f7254 65782c20 765f6f66 u_colorTex, v_of │ │ │ │ - 0x00df0920 66736574 312e7a77 292e7267 622c206b fset1.zw).rgb, k │ │ │ │ - 0x00df0930 57656967 68747329 3b200a20 20202064 Weights); . d │ │ │ │ - 0x00df0940 656c7461 2e7a7720 3d206162 73284c20 elta.zw = abs(L │ │ │ │ - 0x00df0950 2d207665 6332284c 72696768 742c204c - vec2(Lright, L │ │ │ │ - 0x00df0960 626f7474 6f6d2929 3b200a20 20202076 bottom)); . v │ │ │ │ - 0x00df0970 65633220 6d617844 656c7461 203d206d ec2 maxDelta = m │ │ │ │ - 0x00df0980 61782864 656c7461 2e78792c 2064656c ax(delta.xy, del │ │ │ │ - 0x00df0990 74612e7a 77293b20 0a202020 20666c6f ta.zw); . flo │ │ │ │ - 0x00df09a0 6174204c 6c656674 6c656674 203d2064 at Lleftleft = d │ │ │ │ - 0x00df09b0 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ - 0x00df09c0 6f725465 782c2076 5f6f6666 73657432 orTex, v_offset2 │ │ │ │ - 0x00df09d0 2e787929 2e726762 2c206b57 65696768 .xy).rgb, kWeigh │ │ │ │ - 0x00df09e0 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ - 0x00df09f0 4c746f70 746f7020 3d20646f 74287465 Ltoptop = dot(te │ │ │ │ - 0x00df0a00 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00df0a10 2c20765f 6f666673 6574322e 7a77292e , v_offset2.zw). │ │ │ │ - 0x00df0a20 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ - 0x00df0a30 0a202020 2064656c 74612e7a 77203d20 . delta.zw = │ │ │ │ - 0x00df0a40 61627328 76656332 284c6c65 66742c20 abs(vec2(Lleft, │ │ │ │ - 0x00df0a50 4c746f70 29202d20 76656332 284c6c65 Ltop) - vec2(Lle │ │ │ │ - 0x00df0a60 66746c65 66742c20 4c746f70 746f7029 ftleft, Ltoptop) │ │ │ │ - 0x00df0a70 293b200a 20202020 6d617844 656c7461 ); . maxDelta │ │ │ │ - 0x00df0a80 203d206d 6178286d 61784465 6c74612e = max(maxDelta. │ │ │ │ - 0x00df0a90 78792c20 64656c74 612e7a77 293b200a xy, delta.zw); . │ │ │ │ - 0x00df0aa0 20202020 666c6f61 74206669 6e616c44 float finalD │ │ │ │ - 0x00df0ab0 656c7461 203d206d 6178286d 61784465 elta = max(maxDe │ │ │ │ - 0x00df0ac0 6c74612e 782c206d 61784465 6c74612e lta.x, maxDelta. │ │ │ │ - 0x00df0ad0 79293b20 0a202020 20656467 6573202a y); . edges * │ │ │ │ - 0x00df0ae0 3d207374 65702866 696e616c 44656c74 = step(finalDelt │ │ │ │ - 0x00df0af0 612c2053 4d41415f 4c4f4341 4c5f434f a, SMAA_LOCAL_CO │ │ │ │ - 0x00df0b00 4e545241 53545f41 44415054 4154494f NTRAST_ADAPTATIO │ │ │ │ - 0x00df0b10 4e5f4641 43544f52 202a2064 656c7461 N_FACTOR * delta │ │ │ │ - 0x00df0b20 2e787929 3b200a20 20202076 5f467261 .xy); . v_Fra │ │ │ │ - 0x00df0b30 67436f6c 6f72203d 20766563 34286564 gColor = vec4(ed │ │ │ │ - 0x00df0b40 6765732c 20302e30 2c20312e 30293b20 ges, 0.0, 1.0); │ │ │ │ - 0x00df0b50 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00df0b60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df0b70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df0b80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df0b90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df0ba0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df0bb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df0bc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df0bd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df0be0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df0bf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df0c00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df0c10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df0c20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df0c30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df0c40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df0c50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df0c60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df0c70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df0c80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df0c90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df0ca0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df0cb0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00df0cc0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00df0cd0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00df0ce0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00df0cf0 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00df0d00 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ - 0x00df0d10 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ - 0x00df0d20 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ - 0x00df0d30 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00df0d40 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ - 0x00df0d50 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ - 0x00df0d60 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00df0d70 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00df0d80 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00df0d90 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00df0da0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00df0db0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00df0dc0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00df0dd0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00df0de0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df0df0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00df0e00 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00df0e10 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00df0e20 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00df0e30 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00df0e40 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00df0e50 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00df0e60 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00df0e70 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00df0e80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00df0e90 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00df0ea0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00df0eb0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00df0ec0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00df0ed0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00df0ee0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00df0ef0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00df0f00 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00df0f10 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00df0f20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00df0f30 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00df0f40 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00df0f50 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00df0f60 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00df0f70 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00df0f80 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00df0f90 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00df0fa0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00df0fb0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00df0fc0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00df0fd0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00df0fe0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00df0ff0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00df1000 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00df1010 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00df1020 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00df1030 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00df1040 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00df1050 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00df1060 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00df1070 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00df1080 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00df1090 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00df10a0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00df10b0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00df10c0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00df10d0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00df10e0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00df10f0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00df1100 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00df1110 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00df1120 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00df1130 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00df1140 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00df1150 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00df1160 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00df1170 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00df1180 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00df1190 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00df11a0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00df11b0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00df11c0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00df11d0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00df11e0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00df11f0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00df1200 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00df1210 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00df1220 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00df1230 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00df1240 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00df1250 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00df1260 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00df1270 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00df1280 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00df1290 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00df12a0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00df12b0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00df12c0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00df12d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00df12e0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00df12f0 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ - 0x00df1300 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ - 0x00df1310 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ - 0x00df1320 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ - 0x00df1330 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00df1340 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ - 0x00df1350 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ - 0x00df1360 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ - 0x00df1370 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ - 0x00df1380 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ - 0x00df1390 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ - 0x00df13a0 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ - 0x00df13b0 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ - 0x00df13c0 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ - 0x00df13d0 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ - 0x00df13e0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00df13f0 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ - 0x00df1400 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ - 0x00df1410 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ - 0x00df1420 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ - 0x00df1430 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ - 0x00df1440 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00df1450 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00df1460 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df1470 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df1480 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df1490 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df14a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df14b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df14c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df14d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df14e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df14f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df1500 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df1510 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df1520 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df1530 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df1540 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df1550 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df1560 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df1570 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df1580 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df1590 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df15a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df15b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df15c0 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ - 0x00df15d0 765f6f66 66736574 3b200a20 206f7574 v_offset; . out │ │ │ │ - 0x00df15e0 20766563 3420765f 46726167 436f6c6f vec4 v_FragColo │ │ │ │ - 0x00df15f0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00df1600 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ - 0x00df1610 4d657472 6963733b 200a2020 756e6966 Metrics; . unif │ │ │ │ - 0x00df1620 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00df1630 636f6c6f 72546578 3b200a20 20756e69 colorTex; . uni │ │ │ │ - 0x00df1640 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00df1650 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ - 0x00df1660 65783b20 0a202023 64656669 6e652053 ex; . #define S │ │ │ │ - 0x00df1670 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ - 0x00df1680 726f2874 65782c20 636f6f72 64292074 ro(tex, coord) t │ │ │ │ - 0x00df1690 65787475 72654c6f 64287465 782c2063 extureLod(tex, c │ │ │ │ - 0x00df16a0 6f6f7264 2c20302e 3029200a 2020636f oord, 0.0) . co │ │ │ │ - 0x00df16b0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00df16c0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00df16d0 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ - 0x00df16e0 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ - 0x00df16f0 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ - 0x00df1700 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ - 0x00df1710 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ - 0x00df1720 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ - 0x00df1730 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ - 0x00df1740 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ - 0x00df1750 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ - 0x00df1760 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ - 0x00df1770 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ - 0x00df1780 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ - 0x00df1790 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ - 0x00df17a0 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ - 0x00df17b0 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ - 0x00df17c0 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ - 0x00df17d0 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ - 0x00df17e0 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ - 0x00df17f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00df1800 20202020 76656334 20613b20 0a202020 vec4 a; . │ │ │ │ - 0x00df1810 20612e78 203d2074 65787475 72652875 a.x = texture(u │ │ │ │ - 0x00df1820 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ - 0x00df1830 65782c20 765f6f66 66736574 2e787929 ex, v_offset.xy) │ │ │ │ - 0x00df1840 2e613b20 2f2f2052 69676874 200a2020 .a; // Right . │ │ │ │ - 0x00df1850 2020612e 79203d20 74657874 75726528 a.y = texture( │ │ │ │ - 0x00df1860 755f626c 656e6469 6e675765 69676874 u_blendingWeight │ │ │ │ - 0x00df1870 5465782c 20765f6f 66667365 742e7a77 Tex, v_offset.zw │ │ │ │ - 0x00df1880 292e673b 202f2f20 546f7020 0a202020 ).g; // Top . │ │ │ │ - 0x00df1890 20612e77 7a203d20 74657874 75726528 a.wz = texture( │ │ │ │ - 0x00df18a0 755f626c 656e6469 6e675765 69676874 u_blendingWeight │ │ │ │ - 0x00df18b0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ - 0x00df18c0 6f6f7264 73292e78 7a3b202f 2f20426f oords).xz; // Bo │ │ │ │ - 0x00df18d0 74746f6d 202f204c 65667420 0a202020 ttom / Left . │ │ │ │ - 0x00df18e0 20696620 28646f74 28612c20 76656334 if (dot(a, vec4 │ │ │ │ - 0x00df18f0 28312e30 2c20312e 302c2031 2e302c20 (1.0, 1.0, 1.0, │ │ │ │ - 0x00df1900 312e3029 29203c20 31652d35 29200a20 1.0)) < 1e-5) . │ │ │ │ - 0x00df1910 2020207b 200a2020 20202020 765f4672 { . v_Fr │ │ │ │ - 0x00df1920 6167436f 6c6f7220 3d207465 78747572 agColor = textur │ │ │ │ - 0x00df1930 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00df1940 636f6c6f 72546578 436f6f72 6473293b colorTexCoords); │ │ │ │ - 0x00df1950 200a2020 20207d20 0a202020 20656c73 . } . els │ │ │ │ - 0x00df1960 65200a20 2020207b 200a2020 20202020 e . { . │ │ │ │ - 0x00df1970 76656334 20626c65 6e64696e 674f6666 vec4 blendingOff │ │ │ │ - 0x00df1980 73657420 3d207665 63342830 2e302c20 set = vec4(0.0, │ │ │ │ - 0x00df1990 612e792c 20302e30 2c20612e 77293b20 a.y, 0.0, a.w); │ │ │ │ - 0x00df19a0 0a202020 20202076 65633220 626c656e . vec2 blen │ │ │ │ - 0x00df19b0 64696e67 57656967 6874203d 20612e79 dingWeight = a.y │ │ │ │ - 0x00df19c0 773b200a 20202020 20206966 20286d61 w; . if (ma │ │ │ │ - 0x00df19d0 7828612e 782c2061 2e7a2920 3e206d61 x(a.x, a.z) > ma │ │ │ │ - 0x00df19e0 7828612e 792c2061 2e772929 200a2020 x(a.y, a.w)) . │ │ │ │ - 0x00df19f0 20202020 7b200a20 20202020 20202062 { . b │ │ │ │ - 0x00df1a00 6c656e64 696e674f 66667365 74203d20 lendingOffset = │ │ │ │ - 0x00df1a10 76656334 28612e78 2c20302e 302c2061 vec4(a.x, 0.0, a │ │ │ │ - 0x00df1a20 2e7a2c20 302e3029 3b200a20 20202020 .z, 0.0); . │ │ │ │ - 0x00df1a30 20202062 6c656e64 696e6757 65696768 blendingWeigh │ │ │ │ - 0x00df1a40 74203d20 612e787a 3b200a20 20202020 t = a.xz; . │ │ │ │ - 0x00df1a50 207d200a 20202020 2020626c 656e6469 } . blendi │ │ │ │ - 0x00df1a60 6e675765 69676874 202f3d20 646f7428 ngWeight /= dot( │ │ │ │ - 0x00df1a70 626c656e 64696e67 57656967 68742c20 blendingWeight, │ │ │ │ - 0x00df1a80 76656332 28312e30 2c20312e 3029293b vec2(1.0, 1.0)); │ │ │ │ - 0x00df1a90 200a2020 20202020 76656334 20626320 . vec4 bc │ │ │ │ - 0x00df1aa0 3d20626c 656e6469 6e674f66 66736574 = blendingOffset │ │ │ │ - 0x00df1ab0 202a2076 65633428 755f6672 616d6562 * vec4(u_frameb │ │ │ │ - 0x00df1ac0 75666665 724d6574 72696373 2e78792c ufferMetrics.xy, │ │ │ │ - 0x00df1ad0 202d755f 6672616d 65627566 6665724d -u_framebufferM │ │ │ │ - 0x00df1ae0 65747269 63732e78 79293b20 0a202020 etrics.xy); . │ │ │ │ - 0x00df1af0 20202062 63202b3d 20765f63 6f6c6f72 bc += v_color │ │ │ │ - 0x00df1b00 54657843 6f6f7264 732e7879 78793b20 TexCoords.xyxy; │ │ │ │ - 0x00df1b10 0a202020 20202076 65633420 636f6c6f . vec4 colo │ │ │ │ - 0x00df1b20 72203d20 626c656e 64696e67 57656967 r = blendingWeig │ │ │ │ - 0x00df1b30 68742e78 202a2053 4d414153 616d706c ht.x * SMAASampl │ │ │ │ - 0x00df1b40 654c6576 656c5a65 726f2875 5f636f6c eLevelZero(u_col │ │ │ │ - 0x00df1b50 6f725465 782c2062 632e7879 293b200a orTex, bc.xy); . │ │ │ │ - 0x00df1b60 20202020 2020636f 6c6f7220 2b3d2062 color += b │ │ │ │ - 0x00df1b70 6c656e64 696e6757 65696768 742e7920 lendingWeight.y │ │ │ │ - 0x00df1b80 2a20534d 41415361 6d706c65 4c657665 * SMAASampleLeve │ │ │ │ - 0x00df1b90 6c5a6572 6f28755f 636f6c6f 72546578 lZero(u_colorTex │ │ │ │ - 0x00df1ba0 2c206263 2e7a7729 3b200a20 20202020 , bc.zw); . │ │ │ │ - 0x00df1bb0 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ - 0x00df1bc0 6f6c6f72 3b200a20 2020207d 200a2020 olor; . } . │ │ │ │ - 0x00df1bd0 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00df1be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df1bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df1c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df1c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df1c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df1c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df1c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df1c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df1c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df1c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df1c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df1c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df1ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df1cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df1cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df1cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df1ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df1cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df1d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df1d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df1d20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df1d30 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00df1d40 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00df1d50 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00df1d60 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00df1d70 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00df1d80 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ - 0x00df1d90 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ - 0x00df1da0 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ - 0x00df1db0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00df1dc0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00df1dd0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00df1de0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00df1df0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00df1e00 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00df1e10 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00df1e20 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00df1e30 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00df1e40 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00df1e50 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00df1e60 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00df1e70 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00df1e80 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00df1e90 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00df1ea0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00df1eb0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00df1ec0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00df1ed0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df1ee0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00df1ef0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00df1f00 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00df1f10 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00df1f20 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00df1f30 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00df1f40 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00df1f50 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00df1f60 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00df1f70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00df1f80 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00df1f90 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00df1fa0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df1fb0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00df1fc0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00df1fd0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00df1fe0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00df1ff0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00df2000 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00df2010 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00df2020 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00df2030 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00df2040 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00df2050 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00df2060 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00df2070 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00df2080 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00df2090 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00df20a0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00df20b0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00df20c0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00df20d0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00df20e0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00df20f0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00df2100 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00df2110 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00df2120 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00df2130 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00df2140 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00df2150 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00df2160 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00df2170 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00df2180 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00df2190 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00df21a0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00df21b0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00df21c0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00df21d0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00df21e0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00df21f0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00df2200 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00df2210 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00df2220 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00df2230 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00df2240 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00df2250 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00df2260 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00df2270 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00df2280 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00df2290 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00df22a0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00df22b0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00df22c0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00df22d0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00df22e0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00df22f0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00df2300 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00df2310 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00df2320 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00df2330 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00df2340 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ - 0x00df2350 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00df2360 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ - 0x00df2370 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ - 0x00df2380 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00df2390 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ - 0x00df23a0 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ - 0x00df23b0 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ - 0x00df23c0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00df23d0 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ - 0x00df23e0 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ - 0x00df23f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df2400 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df2410 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df2420 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df2430 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df2440 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df2450 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df2460 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df2470 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df2480 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df2490 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df24a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df24b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df24c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df24d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df24e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df24f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df2500 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df2510 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df2520 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df2530 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df2540 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00df2550 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00df2560 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00df2570 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00df2580 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00df2590 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00df25a0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00df25b0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00df25c0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ - 0x00df25d0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00df25e0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00df25f0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00df2600 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00df2610 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ - 0x00df2620 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ - 0x00df2630 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ - 0x00df2640 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00df2650 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ - 0x00df2660 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00df2670 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ - 0x00df2680 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00df2690 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00df26a0 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ - 0x00df26b0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ - 0x00df26c0 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ - 0x00df26d0 6c696e65 50617373 3b200a20 20636f6e linePass; . con │ │ │ │ - 0x00df26e0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00df26f0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00df2700 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ - 0x00df2710 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ - 0x00df2720 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ - 0x00df2730 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ - 0x00df2740 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ - 0x00df2750 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ - 0x00df2760 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ - 0x00df2770 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ - 0x00df2780 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ - 0x00df2790 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ - 0x00df27a0 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ - 0x00df27b0 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ - 0x00df27c0 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ - 0x00df27d0 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ - 0x00df27e0 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ - 0x00df27f0 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ - 0x00df2800 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ - 0x00df2810 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ - 0x00df2820 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00df2830 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00df2840 5446200a 20202020 4c4f575f 50207665 TF . LOW_P ve │ │ │ │ - 0x00df2850 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ - 0x00df2860 765f636f 6c6f723b 200a2020 23656c73 v_color; . #els │ │ │ │ - 0x00df2870 65200a20 2020204c 4f575f50 20766563 e . LOW_P vec │ │ │ │ - 0x00df2880 34206669 6e616c43 6f6c6f72 203d2074 4 finalColor = t │ │ │ │ - 0x00df2890 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00df28a0 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ - 0x00df28b0 72647329 3b200a20 2023656e 64696620 rds); . #endif │ │ │ │ - 0x00df28c0 0a202020 2066696e 616c436f 6c6f722e . finalColor. │ │ │ │ - 0x00df28d0 61202a3d 20755f6f 70616369 74793b20 a *= u_opacity; │ │ │ │ - 0x00df28e0 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ - 0x00df28f0 203d2066 696e616c 436f6c6f 723b200a = finalColor; . │ │ │ │ - 0x00df2900 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00df2910 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df2920 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df2930 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df2940 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df2950 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df2960 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df2970 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df2980 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df2990 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df29a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df29b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df29c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df29d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df29e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df29f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df2a00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df2a10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df2a20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df2a30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df2a40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df2a50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df2a60 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00df2a70 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00df2a80 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00df2a90 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00df2aa0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00df2ab0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00df2ac0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00df2ad0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00df2ae0 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ - 0x00df2af0 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ - 0x00df2b00 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00df2b10 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ - 0x00df2b20 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ - 0x00df2b30 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ - 0x00df2b40 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ - 0x00df2b50 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00df2b60 206d6174 3420755f 7069766f 74547261 mat4 u_pivotTra │ │ │ │ - 0x00df2b70 6e73666f 726d3b20 0a202075 6e69666f nsform; . unifo │ │ │ │ - 0x00df2b80 726d2076 65633220 755f636f 6e747261 rm vec2 u_contra │ │ │ │ - 0x00df2b90 73744761 6d6d613b 200a2020 756e6966 stGamma; . unif │ │ │ │ - 0x00df2ba0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00df2bb0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ - 0x00df2bc0 666c6f61 7420755f 7a536361 6c653b20 float u_zScale; │ │ │ │ - 0x00df2bd0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00df2be0 20755f69 6e746572 706f6c61 74696f6e u_interpolation │ │ │ │ - 0x00df2bf0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00df2c00 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00df2c10 73733b20 0a202075 6e69666f 726d2073 ss; . uniform s │ │ │ │ - 0x00df2c20 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ - 0x00df2c30 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00df2c40 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00df2c50 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00df2c60 20204c4f 575f5020 76656333 204d6f64 LOW_P vec3 Mod │ │ │ │ - 0x00df2c70 756c6174 65427950 61747465 726e446f ulateByPatternDo │ │ │ │ - 0x00df2c80 7473284c 4f575f50 20766563 3320636f ts(LOW_P vec3 co │ │ │ │ - 0x00df2c90 6c6f722c 20666c6f 61742064 61726b65 lor, float darke │ │ │ │ - 0x00df2ca0 6e2c2066 6c6f6174 20636f76 65726167 n, float coverag │ │ │ │ - 0x00df2cb0 6529200a 20207b20 0a202020 20636f6e e) . { . con │ │ │ │ - 0x00df2cc0 73742066 6c6f6174 206b4c69 67687465 st float kLighte │ │ │ │ - 0x00df2cd0 6e203d20 302e3037 353b200a 20202020 n = 0.075; . │ │ │ │ - 0x00df2ce0 69662028 646f7428 636f6c6f 722c2076 if (dot(color, v │ │ │ │ - 0x00df2cf0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ - 0x00df2d00 35322c20 302e3037 32322929 203c2030 52, 0.0722)) < 0 │ │ │ │ - 0x00df2d10 2e352920 0a202020 20202072 65747572 .5) . retur │ │ │ │ - 0x00df2d20 6e20636f 6c6f7220 2b20636f 76657261 n color + covera │ │ │ │ - 0x00df2d30 6765202a 206b4c69 67687465 6e3b200a ge * kLighten; . │ │ │ │ - 0x00df2d40 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00df2d50 202a206d 69782831 2e302c20 6461726b * mix(1.0, dark │ │ │ │ - 0x00df2d60 656e2c20 636f7665 72616765 293b200a en, coverage); . │ │ │ │ - 0x00df2d70 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00df2d80 2829200a 20207b20 0a202023 69666465 () . { . #ifde │ │ │ │ - 0x00df2d90 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00df2da0 20204c4f 575f5020 76656334 20676c79 LOW_P vec4 gly │ │ │ │ - 0x00df2db0 7068436f 6c6f7220 3d20765f 636f6c6f phColor = v_colo │ │ │ │ - 0x00df2dc0 723b200a 20202365 6c736520 0a202020 r; . #else . │ │ │ │ - 0x00df2dd0 204c4f57 5f502076 65633420 676c7970 LOW_P vec4 glyp │ │ │ │ - 0x00df2de0 68436f6c 6f72203d 20746578 74757265 hColor = texture │ │ │ │ - 0x00df2df0 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ - 0x00df2e00 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ - 0x00df2e10 20202365 6e646966 200a2020 2020666c #endif . fl │ │ │ │ - 0x00df2e20 6f617420 64697374 203d2074 65787475 oat dist = textu │ │ │ │ - 0x00df2e30 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ - 0x00df2e40 6d61736b 54657843 6f6f7264 292e723b maskTexCoord).r; │ │ │ │ - 0x00df2e50 200a2020 2020666c 6f617420 616c7068 . float alph │ │ │ │ - 0x00df2e60 61203d20 736d6f6f 74687374 65702875 a = smoothstep(u │ │ │ │ - 0x00df2e70 5f636f6e 74726173 7447616d 6d612e78 _contrastGamma.x │ │ │ │ - 0x00df2e80 202d2075 5f636f6e 74726173 7447616d - u_contrastGam │ │ │ │ - 0x00df2e90 6d612e79 2c20755f 636f6e74 72617374 ma.y, u_contrast │ │ │ │ - 0x00df2ea0 47616d6d 612e7820 2b20755f 636f6e74 Gamma.x + u_cont │ │ │ │ - 0x00df2eb0 72617374 47616d6d 612e792c 20646973 rastGamma.y, dis │ │ │ │ - 0x00df2ec0 7429202a 20755f6f 70616369 74793b20 t) * u_opacity; │ │ │ │ - 0x00df2ed0 0a202020 20676c79 7068436f 6c6f722e . glyphColor. │ │ │ │ - 0x00df2ee0 61202a3d 20616c70 68613b20 0a202020 a *= alpha; . │ │ │ │ - 0x00df2ef0 20765f46 72616743 6f6c6f72 203d2067 v_FragColor = g │ │ │ │ - 0x00df2f00 6c797068 436f6c6f 723b200a 20207d20 lyphColor; . } │ │ │ │ - 0x00df2f10 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df2f20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df2f30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df2f40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df2f50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df2f60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df2f70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df2f80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df2f90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df2fa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df2fb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df2fc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df2fd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df2fe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df2ff0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df3000 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df3010 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df3020 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df3030 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df3040 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df3050 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df3060 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df3070 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00df3080 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00df3090 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00df30a0 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00df30b0 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00df30c0 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00df30d0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00df30e0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00df30f0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00df3100 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00df3110 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00df3120 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00df3130 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00df3140 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00df3150 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00df3160 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00df3170 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00df3180 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00df3190 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00df31a0 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00df31b0 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00df31c0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00df31d0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00df31e0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00df31f0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00df3200 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00df3210 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00df3220 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00df3230 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00df3240 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00df3250 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ - 0x00df3260 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ - 0x00df3270 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ - 0x00df3280 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00df3290 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00df32a0 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00df32b0 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00df32c0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00df32d0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00df32e0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00df32f0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00df3300 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00df3310 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00df3320 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00df3330 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00df3340 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00df3350 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00df3360 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00df3370 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00df3380 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00df3390 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00df33a0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00df33b0 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00df33c0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00df33d0 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00df33e0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00df33f0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00df3400 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00df3410 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00df3420 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00df3430 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00df3440 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00df3450 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00df3460 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00df3470 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00df3480 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00df3490 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00df34a0 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00df34b0 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00df34c0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00df34d0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00df34e0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00df34f0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00df3500 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00df3510 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00df3520 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00df3530 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00df3540 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00df3550 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00df3560 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00df3570 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00df3580 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00df3590 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00df35a0 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00df35b0 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00df35c0 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00df35d0 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00df35e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df35f0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00df3600 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00df3610 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00df3620 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00df3630 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00df3640 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00df3650 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00df3660 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00df3670 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00df3680 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00df3690 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00df36a0 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00df36b0 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00df36c0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00df36d0 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00df36e0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00df36f0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00df3700 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00df3710 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00df3720 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00df3730 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00df3740 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00df3750 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00df3760 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00df3770 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00df3780 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00df3790 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00df37a0 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00df37b0 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00df37c0 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00df37d0 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00df37e0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00df37f0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00df3800 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00df3810 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00df3820 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00df3830 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00df3840 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ - 0x00df3850 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ - 0x00df3860 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ - 0x00df3870 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ - 0x00df3880 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ - 0x00df3890 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00df38a0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00df38b0 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ - 0x00df38c0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00df38d0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00df38e0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00df38f0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00df3900 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00df3910 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00df3920 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ - 0x00df3930 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00df3940 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00df3950 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00df3960 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00df3970 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ - 0x00df3980 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ - 0x00df3990 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00df39a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df39b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df39c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df39d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df39e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df39f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df3a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df3a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df3a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df3a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df3a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df3a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df3a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df3a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df3a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df3a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df3aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df3ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df3ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df3ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df3ae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df3af0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00df3b00 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00df3b10 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00df3b20 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00df3b30 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00df3b40 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00df3b50 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00df3b60 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00df3b70 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00df3b80 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00df3b90 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00df3ba0 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00df3bb0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00df3bc0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00df3bd0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00df3be0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00df3bf0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00df3c00 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00df3c10 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00df3c20 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00df3c30 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00df3c40 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00df3c50 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00df3c60 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00df3c70 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00df3c80 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00df3c90 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00df3ca0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00df3cb0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00df3cc0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00df3cd0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00df3ce0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00df3cf0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00df3d00 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00df3d10 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00df3d20 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00df3d30 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00df3d40 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00df3d50 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00df3d60 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00df3d70 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00df3d80 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00df3d90 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00df3da0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00df3db0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00df3dc0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00df3dd0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00df3de0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00df3df0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00df3e00 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00df3e10 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00df3e20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00df3e30 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00df3e40 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00df3e50 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00df3e60 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00df3e70 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00df3e80 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00df3e90 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00df3ea0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00df3eb0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00df3ec0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00df3ed0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00df3ee0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00df3ef0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00df3f00 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00df3f10 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00df3f20 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00df3f30 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00df3f40 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00df3f50 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00df3f60 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00df3f70 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00df3f80 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00df3f90 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00df3fa0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00df3fb0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00df3fc0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00df3fd0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00df3fe0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00df3ff0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00df4000 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00df4010 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00df4020 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00df4030 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00df4040 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00df4050 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00df4060 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00df4070 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00df4080 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00df4090 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00df40a0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00df40b0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00df40c0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00df40d0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00df40e0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00df40f0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00df4100 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00df4110 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00df4120 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00df4130 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00df4140 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00df4150 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00df4160 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00df4170 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00df4180 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00df4190 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00df41a0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00df41b0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00df41c0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00df41d0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00df41e0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00df41f0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00df4200 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00df4210 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00df4220 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00df4230 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00df4240 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00df4250 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00df4260 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00df4270 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00df4280 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00df4290 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00df42a0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00df42b0 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00df42c0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00df42d0 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00df42e0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00df42f0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00df4300 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00df4310 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00df4320 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00df4330 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00df4340 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00df4350 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00df4360 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00df4370 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00df4380 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00df4390 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00df43a0 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00df43b0 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00df43c0 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00df43d0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00df43e0 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ - 0x00df43f0 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ - 0x00df4400 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ - 0x00df4410 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00df4420 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00df4430 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00df4440 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00df4450 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00df4460 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df4470 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df4480 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df4490 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df44a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df44b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df44c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df44d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df44e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df44f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df4500 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df4510 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df4520 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df4530 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df4540 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df4550 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df4560 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df4570 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df4580 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df4590 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df45a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df45b0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00df45c0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00df45d0 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00df45e0 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00df45f0 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00df4600 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00df4610 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00df4620 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00df4630 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00df4640 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00df4650 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00df4660 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00df4670 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df4680 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00df4690 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00df46a0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00df46b0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00df46c0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00df46d0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00df46e0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00df46f0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00df4700 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00df4710 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00df4720 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00df4730 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00df4740 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00df4750 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00df4760 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00df4770 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00df4780 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00df4790 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00df47a0 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ - 0x00df47b0 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ - 0x00df47c0 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00df47d0 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ - 0x00df47e0 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ - 0x00df47f0 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ - 0x00df4800 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ - 0x00df4810 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00df4820 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00df4830 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00df4840 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00df4850 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00df4860 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00df4870 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00df4880 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00df4890 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00df48a0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00df48b0 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00df48c0 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00df48d0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00df48e0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00df48f0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00df4900 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00df4910 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00df4920 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00df4930 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00df4940 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00df4950 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00df4960 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00df4970 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00df4980 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00df4990 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00df49a0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00df49b0 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00df49c0 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00df49d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df49e0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00df49f0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00df4a00 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00df4a10 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00df4a20 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00df4a30 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00df4a40 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00df4a50 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00df4a60 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00df4a70 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00df4a80 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00df4a90 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00df4aa0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00df4ab0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00df4ac0 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00df4ad0 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00df4ae0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00df4af0 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00df4b00 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00df4b10 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00df4b20 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00df4b30 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00df4b40 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00df4b50 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00df4b60 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00df4b70 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00df4b80 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00df4b90 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00df4ba0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00df4bb0 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00df4bc0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00df4bd0 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00df4be0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00df4bf0 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00df4c00 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00df4c10 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00df4c20 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00df4c30 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00df4c40 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00df4c50 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00df4c60 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00df4c70 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00df4c80 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00df4c90 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00df4ca0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00df4cb0 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00df4cc0 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00df4cd0 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00df4ce0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00df4cf0 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00df4d00 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00df4d10 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00df4d20 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00df4d30 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00df4d40 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00df4d50 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00df4d60 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00df4d70 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00df4d80 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00df4d90 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00df4da0 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ - 0x00df4db0 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ - 0x00df4dc0 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ - 0x00df4dd0 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ - 0x00df4de0 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ - 0x00df4df0 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ - 0x00df4e00 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ - 0x00df4e10 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ - 0x00df4e20 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ - 0x00df4e30 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ - 0x00df4e40 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ - 0x00df4e50 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ - 0x00df4e60 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ - 0x00df4e70 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ - 0x00df4e80 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ - 0x00df4e90 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ - 0x00df4ea0 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ - 0x00df4eb0 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ - 0x00df4ec0 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ - 0x00df4ed0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00df4ee0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00df4ef0 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ - 0x00df4f00 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00df4f10 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00df4f20 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ - 0x00df4f30 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ - 0x00df4f40 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ - 0x00df4f50 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ - 0x00df4f60 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ - 0x00df4f70 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ - 0x00df4f80 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00df4f90 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ - 0x00df4fa0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00df4fb0 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ - 0x00df4fc0 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ - 0x00df4fd0 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ - 0x00df4fe0 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ - 0x00df4ff0 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ - 0x00df5000 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ - 0x00df5010 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ - 0x00df5020 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ - 0x00df5030 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df5040 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df5050 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df5060 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df5070 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df5080 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df5090 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df50a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df50b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df50c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df50d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df50e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df50f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df5100 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df5110 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df5120 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df5130 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df5140 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df5150 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df5160 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df5170 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df5180 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df5190 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00df51a0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00df51b0 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00df51c0 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00df51d0 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00df51e0 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00df51f0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00df5200 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00df5210 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00df5220 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00df5230 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00df5240 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00df5250 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df5260 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00df5270 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00df5280 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00df5290 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00df52a0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00df52b0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00df52c0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00df52d0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00df52e0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00df52f0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00df5300 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00df5310 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00df5320 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00df5330 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00df5340 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00df5350 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00df5360 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00df5370 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00df5380 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ - 0x00df5390 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ - 0x00df53a0 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00df53b0 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ - 0x00df53c0 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ - 0x00df53d0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00df53e0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00df53f0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00df5400 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00df5410 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00df5420 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00df5430 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00df5440 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00df5450 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00df5460 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00df5470 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00df5480 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00df5490 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00df54a0 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00df54b0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00df54c0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00df54d0 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00df54e0 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00df54f0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00df5500 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00df5510 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00df5520 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00df5530 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00df5540 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00df5550 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00df5560 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00df5570 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00df5580 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00df5590 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00df55a0 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00df55b0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00df55c0 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00df55d0 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00df55e0 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00df55f0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00df5600 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00df5610 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00df5620 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00df5630 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00df5640 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00df5650 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00df5660 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00df5670 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00df5680 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00df5690 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00df56a0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00df56b0 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00df56c0 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00df56d0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00df56e0 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00df56f0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00df5700 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00df5710 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00df5720 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00df5730 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00df5740 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00df5750 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00df5760 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00df5770 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00df5780 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00df5790 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00df57a0 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00df57b0 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00df57c0 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00df57d0 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00df57e0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00df57f0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00df5800 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00df5810 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00df5820 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00df5830 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00df5840 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00df5850 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00df5860 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00df5870 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00df5880 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00df5890 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00df58a0 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00df58b0 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00df58c0 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00df58d0 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00df58e0 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00df58f0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00df5900 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00df5910 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00df5920 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00df5930 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00df5940 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00df5950 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00df5960 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ - 0x00df5970 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ - 0x00df5980 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ - 0x00df5990 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ - 0x00df59a0 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ - 0x00df59b0 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ - 0x00df59c0 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ - 0x00df59d0 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ - 0x00df59e0 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ - 0x00df59f0 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ - 0x00df5a00 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00df5a10 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ - 0x00df5a20 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00df5a30 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00df5a40 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00df5a50 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00df5a60 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00df5a70 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00df5a80 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00df5a90 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00df5aa0 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00df5ab0 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00df5ac0 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00df5ad0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00df5ae0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00df5af0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00df5b00 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00df5b10 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00df5b20 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ - 0x00df5b30 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ - 0x00df5b40 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ - 0x00df5b50 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ - 0x00df5b60 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ - 0x00df5b70 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00df5b80 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ - 0x00df5b90 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00df5ba0 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ - 0x00df5bb0 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00df5bc0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00df5bd0 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ - 0x00df5be0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00df5bf0 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ - 0x00df5c00 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ - 0x00df5c10 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ - 0x00df5c20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df5c30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df5c40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df5c50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df5c60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df5c70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df5c80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df5c90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df5ca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df5cb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df5cc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df5cd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df5ce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df5cf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df5d00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df5d10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df5d20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df5d30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df5d40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df5d50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df5d60 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00df5d70 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00df5d80 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00df5d90 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00df5da0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00df5db0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00df5dc0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00df5dd0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00df5de0 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ - 0x00df5df0 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ - 0x00df5e00 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00df5e10 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ - 0x00df5e20 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ - 0x00df5e30 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ - 0x00df5e40 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ - 0x00df5e50 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00df5e60 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ - 0x00df5e70 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ - 0x00df5e80 6d207665 63322075 5f706f73 6974696f m vec2 u_positio │ │ │ │ - 0x00df5e90 6e3b200a 2020756e 69666f72 6d20666c n; . uniform fl │ │ │ │ - 0x00df5ea0 6f617420 755f6973 4f75746c 696e6550 oat u_isOutlineP │ │ │ │ - 0x00df5eb0 6173733b 200a2020 756e6966 6f726d20 ass; . uniform │ │ │ │ - 0x00df5ec0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00df5ed0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00df5ee0 7420755f 6c656e67 74683b20 0a202075 t u_length; . u │ │ │ │ - 0x00df5ef0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00df5f00 20755f6d 61736b54 65783b20 0a202063 u_maskTex; . c │ │ │ │ - 0x00df5f10 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00df5f20 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00df5f30 3030302e 303b200a 20204c4f 575f5020 000.0; . LOW_P │ │ │ │ - 0x00df5f40 76656333 204d6f64 756c6174 65427950 vec3 ModulateByP │ │ │ │ - 0x00df5f50 61747465 726e446f 7473284c 4f575f50 atternDots(LOW_P │ │ │ │ - 0x00df5f60 20766563 3320636f 6c6f722c 20666c6f vec3 color, flo │ │ │ │ - 0x00df5f70 61742064 61726b65 6e2c2066 6c6f6174 at darken, float │ │ │ │ - 0x00df5f80 20636f76 65726167 6529200a 20207b20 coverage) . { │ │ │ │ - 0x00df5f90 0a202020 20636f6e 73742066 6c6f6174 . const float │ │ │ │ - 0x00df5fa0 206b4c69 67687465 6e203d20 302e3037 kLighten = 0.07 │ │ │ │ - 0x00df5fb0 353b200a 20202020 69662028 646f7428 5; . if (dot( │ │ │ │ - 0x00df5fc0 636f6c6f 722c2076 65633328 302e3231 color, vec3(0.21 │ │ │ │ - 0x00df5fd0 32362c20 302e3731 35322c20 302e3037 26, 0.7152, 0.07 │ │ │ │ - 0x00df5fe0 32322929 203c2030 2e352920 0a202020 22)) < 0.5) . │ │ │ │ - 0x00df5ff0 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ - 0x00df6000 2b20636f 76657261 6765202a 206b4c69 + coverage * kLi │ │ │ │ - 0x00df6010 67687465 6e3b200a 20202020 72657475 ghten; . retu │ │ │ │ - 0x00df6020 726e2063 6f6c6f72 202a206d 69782831 rn color * mix(1 │ │ │ │ - 0x00df6030 2e302c20 6461726b 656e2c20 636f7665 .0, darken, cove │ │ │ │ - 0x00df6040 72616765 293b200a 20207d20 0a202076 rage); . } . v │ │ │ │ - 0x00df6050 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00df6060 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00df6070 5f565446 200a2020 20204c4f 575f5020 _VTF . LOW_P │ │ │ │ - 0x00df6080 76656334 20676c79 7068436f 6c6f7220 vec4 glyphColor │ │ │ │ - 0x00df6090 3d20765f 636f6c6f 723b200a 20202365 = v_color; . #e │ │ │ │ - 0x00df60a0 6c736520 0a202020 204c4f57 5f502076 lse . LOW_P v │ │ │ │ - 0x00df60b0 65633420 676c7970 68436f6c 6f72203d ec4 glyphColor = │ │ │ │ - 0x00df60c0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00df60d0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ - 0x00df60e0 6f6f7264 293b200a 20202365 6e646966 oord); . #endif │ │ │ │ - 0x00df60f0 200a2020 2020666c 6f617420 64697374 . float dist │ │ │ │ - 0x00df6100 203d2074 65787475 72652875 5f6d6173 = texture(u_mas │ │ │ │ - 0x00df6110 6b546578 2c20765f 6d61736b 54657843 kTex, v_maskTexC │ │ │ │ - 0x00df6120 6f6f7264 292e723b 200a2020 2020666c oord).r; . fl │ │ │ │ - 0x00df6130 6f617420 616c7068 61203d20 736d6f6f oat alpha = smoo │ │ │ │ - 0x00df6140 74687374 65702875 5f636f6e 74726173 thstep(u_contras │ │ │ │ - 0x00df6150 7447616d 6d612e78 202d2075 5f636f6e tGamma.x - u_con │ │ │ │ - 0x00df6160 74726173 7447616d 6d612e79 2c20755f trastGamma.y, u_ │ │ │ │ - 0x00df6170 636f6e74 72617374 47616d6d 612e7820 contrastGamma.x │ │ │ │ - 0x00df6180 2b20755f 636f6e74 72617374 47616d6d + u_contrastGamm │ │ │ │ - 0x00df6190 612e792c 20646973 7429202a 20755f6f a.y, dist) * u_o │ │ │ │ - 0x00df61a0 70616369 74793b20 0a202020 20676c79 pacity; . gly │ │ │ │ - 0x00df61b0 7068436f 6c6f722e 61202a3d 20616c70 phColor.a *= alp │ │ │ │ - 0x00df61c0 68613b20 0a202020 20765f46 72616743 ha; . v_FragC │ │ │ │ - 0x00df61d0 6f6c6f72 203d2067 6c797068 436f6c6f olor = glyphColo │ │ │ │ - 0x00df61e0 723b200a 20207d20 0a000000 00000000 r; . } ........ │ │ │ │ - 0x00df61f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df6200 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df6210 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df6220 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df6230 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df6240 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df6250 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df6260 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df6270 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df6280 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df6290 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df62a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df62b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df62c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df62d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df62e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df62f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df6300 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df6310 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df6320 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df6330 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df6340 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df6350 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00df6360 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00df6370 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ - 0x00df6380 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ - 0x00df6390 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00df63a0 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ - 0x00df63b0 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ - 0x00df63c0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00df63d0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00df63e0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00df63f0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00df6400 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00df6410 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df6420 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00df6430 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00df6440 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00df6450 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00df6460 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00df6470 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00df6480 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00df6490 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00df64a0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00df64b0 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00df64c0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00df64d0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00df64e0 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00df64f0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00df6500 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00df6510 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ - 0x00df6520 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00df6530 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00df6540 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00df6550 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ - 0x00df6560 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ - 0x00df6570 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ - 0x00df6580 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ - 0x00df6590 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00df65a0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00df65b0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00df65c0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00df65d0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00df65e0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00df65f0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00df6600 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00df6610 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00df6620 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00df6630 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00df6640 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00df6650 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00df6660 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00df6670 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00df6680 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00df6690 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00df66a0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00df66b0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00df66c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df66d0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00df66e0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00df66f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00df6700 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00df6710 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00df6720 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00df6730 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00df6740 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00df6750 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00df6760 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00df6770 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00df6780 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00df6790 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00df67a0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00df67b0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00df67c0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00df67d0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00df67e0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00df67f0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00df6800 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00df6810 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00df6820 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00df6830 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00df6840 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00df6850 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00df6860 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00df6870 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00df6880 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00df6890 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00df68a0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00df68b0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00df68c0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00df68d0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00df68e0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00df68f0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00df6900 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00df6910 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00df6920 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00df6930 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00df6940 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00df6950 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00df6960 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00df6970 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00df6980 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00df6990 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00df69a0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00df69b0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00df69c0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00df69d0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00df69e0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00df69f0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00df6a00 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00df6a10 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00df6a20 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00df6a30 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00df6a40 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00df6a50 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00df6a60 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00df6a70 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00df6a80 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00df6a90 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00df6aa0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00df6ab0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00df6ac0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00df6ad0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00df6ae0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00df6af0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00df6b00 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00df6b10 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00df6b20 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ - 0x00df6b30 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ - 0x00df6b40 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ - 0x00df6b50 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ - 0x00df6b60 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ - 0x00df6b70 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ - 0x00df6b80 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ - 0x00df6b90 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ - 0x00df6ba0 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ - 0x00df6bb0 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ - 0x00df6bc0 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ - 0x00df6bd0 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ - 0x00df6be0 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ - 0x00df6bf0 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ - 0x00df6c00 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ - 0x00df6c10 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00df6c20 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ - 0x00df6c30 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ - 0x00df6c40 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00df6c50 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00df6c60 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00df6c70 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00df6c80 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00df6c90 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00df6ca0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00df6cb0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00df6cc0 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ - 0x00df6cd0 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ - 0x00df6ce0 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ - 0x00df6cf0 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ - 0x00df6d00 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ - 0x00df6d10 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ - 0x00df6d20 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00df6d30 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ - 0x00df6d40 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ - 0x00df6d50 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ - 0x00df6d60 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ - 0x00df6d70 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ - 0x00df6d80 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00df6d90 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00df6da0 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00df6db0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00df6dc0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00df6dd0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df6de0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df6df0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df6e00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df6e10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df6e20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df6e30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df6e40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df6e50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df6e60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df6e70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df6e80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df6e90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df6ea0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df6eb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df6ec0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df6ed0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df6ee0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df6ef0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df6f00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df6f10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df6f20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df6f30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df6f40 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00df6f50 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00df6f60 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00df6f70 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00df6f80 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00df6f90 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00df6fa0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00df6fb0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00df6fc0 69666f72 6d207665 63322075 5f636f6e iform vec2 u_con │ │ │ │ - 0x00df6fd0 74726173 7447616d 6d613b20 0a202075 trastGamma; . u │ │ │ │ - 0x00df6fe0 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ - 0x00df6ff0 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ - 0x00df7000 726d2066 6c6f6174 20755f7a 5363616c rm float u_zScal │ │ │ │ - 0x00df7010 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ - 0x00df7020 6f617420 755f696e 74657270 6f6c6174 oat u_interpolat │ │ │ │ - 0x00df7030 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00df7040 666c6f61 7420755f 69734f75 746c696e float u_isOutlin │ │ │ │ - 0x00df7050 65506173 733b200a 2020756e 69666f72 ePass; . unifor │ │ │ │ - 0x00df7060 6d207361 6d706c65 72324420 755f636f m sampler2D u_co │ │ │ │ - 0x00df7070 6c6f7254 65783b20 0a202063 6f6e7374 lorTex; . const │ │ │ │ - 0x00df7080 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00df7090 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00df70a0 303b200a 20204c4f 575f5020 76656333 0; . LOW_P vec3 │ │ │ │ - 0x00df70b0 204d6f64 756c6174 65427950 61747465 ModulateByPatte │ │ │ │ - 0x00df70c0 726e446f 7473284c 4f575f50 20766563 rnDots(LOW_P vec │ │ │ │ - 0x00df70d0 3320636f 6c6f722c 20666c6f 61742064 3 color, float d │ │ │ │ - 0x00df70e0 61726b65 6e2c2066 6c6f6174 20636f76 arken, float cov │ │ │ │ - 0x00df70f0 65726167 6529200a 20207b20 0a202020 erage) . { . │ │ │ │ - 0x00df7100 20636f6e 73742066 6c6f6174 206b4c69 const float kLi │ │ │ │ - 0x00df7110 67687465 6e203d20 302e3037 353b200a ghten = 0.075; . │ │ │ │ - 0x00df7120 20202020 69662028 646f7428 636f6c6f if (dot(colo │ │ │ │ - 0x00df7130 722c2076 65633328 302e3231 32362c20 r, vec3(0.2126, │ │ │ │ - 0x00df7140 302e3731 35322c20 302e3037 32322929 0.7152, 0.0722)) │ │ │ │ - 0x00df7150 203c2030 2e352920 0a202020 20202072 < 0.5) . r │ │ │ │ - 0x00df7160 65747572 6e20636f 6c6f7220 2b20636f eturn color + co │ │ │ │ - 0x00df7170 76657261 6765202a 206b4c69 67687465 verage * kLighte │ │ │ │ - 0x00df7180 6e3b200a 20202020 72657475 726e2063 n; . return c │ │ │ │ - 0x00df7190 6f6c6f72 202a206d 69782831 2e302c20 olor * mix(1.0, │ │ │ │ - 0x00df71a0 6461726b 656e2c20 636f7665 72616765 darken, coverage │ │ │ │ - 0x00df71b0 293b200a 20207d20 0a202076 6f696420 ); . } . void │ │ │ │ - 0x00df71c0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00df71d0 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ - 0x00df71e0 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ - 0x00df71f0 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ - 0x00df7200 78436f6f 72647329 3b200a20 20202066 xCoords); . f │ │ │ │ - 0x00df7210 696e616c 436f6c6f 722e6120 2a3d2075 inalColor.a *= u │ │ │ │ - 0x00df7220 5f6f7061 63697479 3b200a20 20202076 _opacity; . v │ │ │ │ - 0x00df7230 5f467261 67436f6c 6f72203d 2066696e _FragColor = fin │ │ │ │ - 0x00df7240 616c436f 6c6f723b 200a2020 7d200a00 alColor; . } .. │ │ │ │ - 0x00df7250 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df7260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df7270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df7280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df7290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df72a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df72b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df72c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df72d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df72e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df72f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df7300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df7310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df7320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df7330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df7340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df7350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df7360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df7370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df7380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df7390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df73a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df73b0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00df73c0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00df73d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00df73e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00df73f0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00df7400 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00df7410 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00df7420 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00df7430 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00df7440 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00df7450 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00df7460 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00df7470 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00df7480 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00df7490 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00df74a0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00df74b0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00df74c0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00df74d0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00df74e0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00df74f0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00df7500 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00df7510 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00df7520 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00df7530 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00df7540 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00df7550 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00df7560 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00df7570 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00df7580 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00df7590 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df75a0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00df75b0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00df75c0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00df75d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00df75e0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00df75f0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00df7600 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00df7610 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00df7620 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00df7630 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00df7640 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00df7650 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00df7660 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00df7670 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00df7680 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00df7690 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00df76a0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00df76b0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00df76c0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00df76d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00df76e0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00df76f0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00df7700 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00df7710 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00df7720 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00df7730 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00df7740 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00df7750 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00df7760 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00df7770 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00df7780 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00df7790 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00df77a0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00df77b0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00df77c0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00df77d0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00df77e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00df77f0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00df7800 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00df7810 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00df7820 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00df7830 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00df7840 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00df7850 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00df7860 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00df7870 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00df7880 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00df7890 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00df78a0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00df78b0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00df78c0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00df78d0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00df78e0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00df78f0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00df7900 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00df7910 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00df7920 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00df7930 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00df7940 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00df7950 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00df7960 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00df7970 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00df7980 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00df7990 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00df79a0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00df79b0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00df79c0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00df79d0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00df79e0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00df79f0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00df7a00 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00df7a10 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00df7a20 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00df7a30 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00df7a40 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00df7a50 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00df7a60 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00df7a70 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00df7a80 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00df7a90 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00df7aa0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00df7ab0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00df7ac0 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00df7ad0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00df7ae0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00df7af0 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ - 0x00df7b00 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ - 0x00df7b10 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00df7b20 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00df7b30 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ - 0x00df7b40 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ - 0x00df7b50 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00df7b60 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ - 0x00df7b70 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00df7b80 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00df7b90 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00df7ba0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df7bb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df7bc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df7bd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df7be0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df7bf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df7c00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df7c10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df7c20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df7c30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df7c40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df7c50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df7c60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df7c70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df7c80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df7c90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df7ca0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df7cb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df7cc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df7cd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df7ce0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df7cf0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df7d00 7264733b 200a2020 696e2066 6c6f6174 rds; . in float │ │ │ │ - 0x00df7d10 20765f69 6e74656e 73697479 3b200a20 v_intensity; . │ │ │ │ - 0x00df7d20 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ - 0x00df7d30 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00df7d40 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00df7d50 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00df7d60 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00df7d70 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00df7d80 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00df7d90 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00df7da0 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00df7db0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00df7dc0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00df7dd0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00df7de0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00df7df0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00df7e00 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00df7e10 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00df7e20 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00df7e30 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00df7e40 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00df7e50 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00df7e60 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00df7e70 72203d20 31303030 2e303b20 0a20204c r = 1000.0; . L │ │ │ │ - 0x00df7e80 4f575f50 20766563 33204d6f 64756c61 OW_P vec3 Modula │ │ │ │ - 0x00df7e90 74654279 50617474 65726e44 6f747328 teByPatternDots( │ │ │ │ - 0x00df7ea0 4c4f575f 50207665 63332063 6f6c6f72 LOW_P vec3 color │ │ │ │ - 0x00df7eb0 2c20666c 6f617420 6461726b 656e2c20 , float darken, │ │ │ │ - 0x00df7ec0 666c6f61 7420636f 76657261 67652920 float coverage) │ │ │ │ - 0x00df7ed0 0a20207b 200a2020 2020636f 6e737420 . { . const │ │ │ │ - 0x00df7ee0 666c6f61 74206b4c 69676874 656e203d float kLighten = │ │ │ │ - 0x00df7ef0 20302e30 37353b20 0a202020 20696620 0.075; . if │ │ │ │ - 0x00df7f00 28646f74 28636f6c 6f722c20 76656333 (dot(color, vec3 │ │ │ │ - 0x00df7f10 28302e32 3132362c 20302e37 3135322c (0.2126, 0.7152, │ │ │ │ - 0x00df7f20 20302e30 37323229 29203c20 302e3529 0.0722)) < 0.5) │ │ │ │ - 0x00df7f30 200a2020 20202020 72657475 726e2063 . return c │ │ │ │ - 0x00df7f40 6f6c6f72 202b2063 6f766572 61676520 olor + coverage │ │ │ │ - 0x00df7f50 2a206b4c 69676874 656e3b20 0a202020 * kLighten; . │ │ │ │ - 0x00df7f60 20726574 75726e20 636f6c6f 72202a20 return color * │ │ │ │ - 0x00df7f70 6d697828 312e302c 20646172 6b656e2c mix(1.0, darken, │ │ │ │ - 0x00df7f80 20636f76 65726167 65293b20 0a20207d coverage); . } │ │ │ │ - 0x00df7f90 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00df7fa0 0a20207b 200a2020 20207665 63342066 . { . vec4 f │ │ │ │ - 0x00df7fb0 696e616c 436f6c6f 72203d20 76656334 inalColor = vec4 │ │ │ │ - 0x00df7fc0 28746578 74757265 28755f63 6f6c6f72 (texture(u_color │ │ │ │ - 0x00df7fd0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ - 0x00df7fe0 6f6f7264 73292e72 67622c20 755f6f70 oords).rgb, u_op │ │ │ │ - 0x00df7ff0 61636974 79293b20 0a202020 20765f46 acity); . v_F │ │ │ │ - 0x00df8000 72616743 6f6c6f72 203d2076 65633428 ragColor = vec4( │ │ │ │ - 0x00df8010 28765f69 6e74656e 73697479 202a2030 (v_intensity * 0 │ │ │ │ - 0x00df8020 2e32202b 20302e38 29202a20 66696e61 .2 + 0.8) * fina │ │ │ │ - 0x00df8030 6c436f6c 6f722e72 67622c20 66696e61 lColor.rgb, fina │ │ │ │ - 0x00df8040 6c436f6c 6f722e61 293b200a 20207d20 lColor.a); . } │ │ │ │ - 0x00df8050 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df8060 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df8070 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df8080 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df8090 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df80a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df80b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df80c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df80d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df80e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df80f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df8100 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df8110 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df8120 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df8130 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df8140 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df8150 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df8160 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df8170 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df8180 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df8190 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df81a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df81b0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00df81c0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00df81d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00df81e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00df81f0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00df8200 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00df8210 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00df8220 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00df8230 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00df8240 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00df8250 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00df8260 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00df8270 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00df8280 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00df8290 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00df82a0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00df82b0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00df82c0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00df82d0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00df82e0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00df82f0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00df8300 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00df8310 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00df8320 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00df8330 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00df8340 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00df8350 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00df8360 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00df8370 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00df8380 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00df8390 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00df83a0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00df83b0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00df83c0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00df83d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00df83e0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00df83f0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00df8400 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00df8410 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00df8420 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00df8430 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00df8440 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00df8450 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00df8460 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00df8470 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00df8480 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00df8490 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00df84a0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00df84b0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00df84c0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00df84d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00df84e0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00df84f0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00df8500 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00df8510 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00df8520 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00df8530 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00df8540 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00df8550 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00df8560 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00df8570 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00df8580 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00df8590 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00df85a0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00df85b0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00df85c0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00df85d0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00df85e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00df85f0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00df8600 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00df8610 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00df8620 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00df8630 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00df8640 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00df8650 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00df8660 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00df8670 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00df8680 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00df8690 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00df86a0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00df86b0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00df86c0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00df86d0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00df86e0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00df86f0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00df8700 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00df8710 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00df8720 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00df8730 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00df8740 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00df8750 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00df8760 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00df8770 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00df8780 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00df8790 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00df87a0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00df87b0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00df87c0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00df87d0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00df87e0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00df87f0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00df8800 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00df8810 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00df8820 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00df8830 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00df8840 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00df8850 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00df8860 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00df8870 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00df8880 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00df8890 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00df88a0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00df88b0 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ - 0x00df88c0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ - 0x00df88d0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00df88e0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00df88f0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00df8900 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00df8910 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00df8920 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00df8930 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00df8940 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00df8950 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00df8960 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00df8970 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00df8980 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00df8990 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00df89a0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00df89b0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00df89c0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00df89d0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00df89e0 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00df89f0 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00df8a00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df8a10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df8a20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df8a30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df8a40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df8a50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df8a60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df8a70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df8a80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df8a90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df8aa0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df8ab0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df8ac0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df8ad0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df8ae0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df8af0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df8b00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df8b10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df8b20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df8b30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df8b40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df8b50 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df8b60 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00df8b70 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00df8b80 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00df8b90 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00df8ba0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00df8bb0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00df8bc0 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ - 0x00df8bd0 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ - 0x00df8be0 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ - 0x00df8bf0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00df8c00 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00df8c10 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ - 0x00df8c20 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00df8c30 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00df8c40 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ - 0x00df8c50 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00df8c60 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ - 0x00df8c70 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00df8c80 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00df8c90 203d2031 3030302e 303b200a 20204c4f = 1000.0; . LO │ │ │ │ - 0x00df8ca0 575f5020 76656333 204d6f64 756c6174 W_P vec3 Modulat │ │ │ │ - 0x00df8cb0 65427950 61747465 726e446f 7473284c eByPatternDots(L │ │ │ │ - 0x00df8cc0 4f575f50 20766563 3320636f 6c6f722c OW_P vec3 color, │ │ │ │ - 0x00df8cd0 20666c6f 61742064 61726b65 6e2c2066 float darken, f │ │ │ │ - 0x00df8ce0 6c6f6174 20636f76 65726167 6529200a loat coverage) . │ │ │ │ - 0x00df8cf0 20207b20 0a202020 20636f6e 73742066 { . const f │ │ │ │ - 0x00df8d00 6c6f6174 206b4c69 67687465 6e203d20 loat kLighten = │ │ │ │ - 0x00df8d10 302e3037 353b200a 20202020 69662028 0.075; . if ( │ │ │ │ - 0x00df8d20 646f7428 636f6c6f 722c2076 65633328 dot(color, vec3( │ │ │ │ - 0x00df8d30 302e3231 32362c20 302e3731 35322c20 0.2126, 0.7152, │ │ │ │ - 0x00df8d40 302e3037 32322929 203c2030 2e352920 0.0722)) < 0.5) │ │ │ │ - 0x00df8d50 0a202020 20202072 65747572 6e20636f . return co │ │ │ │ - 0x00df8d60 6c6f7220 2b20636f 76657261 6765202a lor + coverage * │ │ │ │ - 0x00df8d70 206b4c69 67687465 6e3b200a 20202020 kLighten; . │ │ │ │ - 0x00df8d80 72657475 726e2063 6f6c6f72 202a206d return color * m │ │ │ │ - 0x00df8d90 69782831 2e302c20 6461726b 656e2c20 ix(1.0, darken, │ │ │ │ - 0x00df8da0 636f7665 72616765 293b200a 20207d20 coverage); . } │ │ │ │ - 0x00df8db0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00df8dc0 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ - 0x00df8dd0 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ - 0x00df8de0 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ - 0x00df8df0 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ - 0x00df8e00 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ - 0x00df8e10 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ - 0x00df8e20 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00df8e30 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ - 0x00df8e40 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00df8e50 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df8e60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df8e70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df8e80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df8e90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df8ea0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df8eb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df8ec0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df8ed0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df8ee0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df8ef0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df8f00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df8f10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df8f20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df8f30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df8f40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df8f50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df8f60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df8f70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df8f80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df8f90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df8fa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df8fb0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00df8fc0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00df8fd0 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ - 0x00df8fe0 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ - 0x00df8ff0 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ - 0x00df9000 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00df9010 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00df9020 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00df9030 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00df9040 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00df9050 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00df9060 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00df9070 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00df9080 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00df9090 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00df90a0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00df90b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00df90c0 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ - 0x00df90d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00df90e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00df90f0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00df9100 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00df9110 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00df9120 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00df9130 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00df9140 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00df9150 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00df9160 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00df9170 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00df9180 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00df9190 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00df91a0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00df91b0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00df91c0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00df91d0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00df91e0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00df91f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00df9200 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00df9210 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00df9220 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00df9230 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00df9240 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00df9250 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00df9260 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00df9270 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00df9280 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00df9290 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00df92a0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00df92b0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00df92c0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00df92d0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00df92e0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00df92f0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00df9300 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00df9310 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00df9320 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00df9330 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00df9340 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00df9350 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00df9360 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00df9370 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00df9380 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00df9390 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00df93a0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00df93b0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00df93c0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00df93d0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00df93e0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00df93f0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00df9400 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00df9410 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00df9420 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00df9430 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00df9440 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00df9450 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00df9460 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00df9470 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00df9480 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00df9490 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00df94a0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00df94b0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00df94c0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00df94d0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00df94e0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00df94f0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00df9500 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00df9510 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00df9520 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00df9530 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00df9540 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00df9550 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00df9560 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00df9570 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00df9580 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00df9590 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00df95a0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00df95b0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00df95c0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00df95d0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00df95e0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00df95f0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00df9600 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00df9610 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00df9620 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00df9630 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00df9640 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00df9650 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00df9660 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ - 0x00df9670 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ - 0x00df9680 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ - 0x00df9690 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00df96a0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00df96b0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00df96c0 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ - 0x00df96d0 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ - 0x00df96e0 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ - 0x00df96f0 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ - 0x00df9700 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ - 0x00df9710 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ - 0x00df9720 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ - 0x00df9730 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00df9740 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00df9750 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ - 0x00df9760 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df9770 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df9780 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df9790 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df97a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df97b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df97c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df97d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df97e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df97f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df9800 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df9810 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df9820 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df9830 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df9840 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df9850 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df9860 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df9870 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df9880 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df9890 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df98a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00df98b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00df98c0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00df98d0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00df98e0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00df98f0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00df9900 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00df9910 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00df9920 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00df9930 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00df9940 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ - 0x00df9950 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00df9960 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ - 0x00df9970 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ - 0x00df9980 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ - 0x00df9990 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00df99a0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00df99b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00df99c0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00df99d0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ - 0x00df99e0 75743b20 0a202075 6e69666f 726d2073 ut; . uniform s │ │ │ │ - 0x00df99f0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ - 0x00df9a00 5465783b 200a2020 636f6e73 7420666c Tex; . const fl │ │ │ │ - 0x00df9a10 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00df9a20 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00df9a30 0a20204c 4f575f50 20766563 33204d6f . LOW_P vec3 Mo │ │ │ │ - 0x00df9a40 64756c61 74654279 50617474 65726e44 dulateByPatternD │ │ │ │ - 0x00df9a50 6f747328 4c4f575f 50207665 63332063 ots(LOW_P vec3 c │ │ │ │ - 0x00df9a60 6f6c6f72 2c20666c 6f617420 6461726b olor, float dark │ │ │ │ - 0x00df9a70 656e2c20 666c6f61 7420636f 76657261 en, float covera │ │ │ │ - 0x00df9a80 67652920 0a20207b 200a2020 2020636f ge) . { . co │ │ │ │ - 0x00df9a90 6e737420 666c6f61 74206b4c 69676874 nst float kLight │ │ │ │ - 0x00df9aa0 656e203d 20302e30 37353b20 0a202020 en = 0.075; . │ │ │ │ - 0x00df9ab0 20696620 28646f74 28636f6c 6f722c20 if (dot(color, │ │ │ │ - 0x00df9ac0 76656333 28302e32 3132362c 20302e37 vec3(0.2126, 0.7 │ │ │ │ - 0x00df9ad0 3135322c 20302e30 37323229 29203c20 152, 0.0722)) < │ │ │ │ - 0x00df9ae0 302e3529 200a2020 20202020 72657475 0.5) . retu │ │ │ │ - 0x00df9af0 726e2063 6f6c6f72 202b2063 6f766572 rn color + cover │ │ │ │ - 0x00df9b00 61676520 2a206b4c 69676874 656e3b20 age * kLighten; │ │ │ │ - 0x00df9b10 0a202020 20726574 75726e20 636f6c6f . return colo │ │ │ │ - 0x00df9b20 72202a20 6d697828 312e302c 20646172 r * mix(1.0, dar │ │ │ │ - 0x00df9b30 6b656e2c 20636f76 65726167 65293b20 ken, coverage); │ │ │ │ - 0x00df9b40 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00df9b50 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ - 0x00df9b60 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ - 0x00df9b70 74657874 75726528 755f636f 6c6f7254 texture(u_colorT │ │ │ │ - 0x00df9b80 65782c20 765f636f 6c6f7254 6578436f ex, v_colorTexCo │ │ │ │ - 0x00df9b90 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ - 0x00df9ba0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ - 0x00df9bb0 61636974 793b200a 20202020 765f4672 acity; . v_Fr │ │ │ │ - 0x00df9bc0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00df9bd0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00df9be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df9bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df9c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df9c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df9c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df9c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df9c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df9c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df9c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df9c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df9c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df9c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df9ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df9cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00df9cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00df9cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00df9ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00df9cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00df9d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00df9d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00df9d20 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00df9d30 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00df9d40 6f6c6f72 5465783b 200a2020 696e2076 olorTex; . in v │ │ │ │ - 0x00df9d50 65633320 765f7465 78436f6f 7264733b ec3 v_texCoords; │ │ │ │ - 0x00df9d60 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00df9d70 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ - 0x00df9d80 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00df9d90 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00df9da0 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ - 0x00df9db0 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ - 0x00df9dc0 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ - 0x00df9dd0 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ - 0x00df9de0 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ - 0x00df9df0 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ - 0x00df9e00 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ - 0x00df9e10 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ - 0x00df9e20 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ - 0x00df9e30 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ - 0x00df9e40 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ - 0x00df9e50 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ - 0x00df9e60 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ - 0x00df9e70 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ - 0x00df9e80 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ - 0x00df9e90 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ - 0x00df9ea0 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ - 0x00df9eb0 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ - 0x00df9ec0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00df9ed0 20202076 5f467261 67436f6c 6f72203d v_FragColor = │ │ │ │ - 0x00df9ee0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00df9ef0 5465782c 20765f74 6578436f 6f726473 Tex, v_texCoords │ │ │ │ - 0x00df9f00 2e787929 3b200a20 207d200a 00000000 .xy); . } ..... │ │ │ │ - 0x00df9f10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00df9f20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00df9f30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00df9f40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00df9f50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00df9f60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00df9f70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00df9f80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00df9f90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00df9fa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00df9fb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00df9fc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00df9fd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00df9fe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00df9ff0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfa000 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfa010 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfa020 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfa030 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfa040 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfa050 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfa060 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ - 0x00dfa070 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ - 0x00dfa080 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ - 0x00dfa090 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ - 0x00dfa0a0 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ - 0x00dfa0b0 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ - 0x00dfa0c0 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ - 0x00dfa0d0 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ - 0x00dfa0e0 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ - 0x00dfa0f0 726d2076 65633420 755f7465 78747572 rm vec4 u_textur │ │ │ │ - 0x00dfa100 65526563 744d696e 4d61785b 54494c45 eRectMinMax[TILE │ │ │ │ - 0x00dfa110 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ - 0x00dfa120 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ - 0x00dfa130 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ - 0x00dfa140 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ - 0x00dfa150 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ - 0x00dfa160 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00dfa170 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00dfa180 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00dfa190 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00dfa1a0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00dfa1b0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00dfa1c0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00dfa1d0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00dfa1e0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00dfa1f0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00dfa200 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00dfa210 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00dfa220 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00dfa230 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00dfa240 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00dfa250 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00dfa260 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00dfa270 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dfa280 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00dfa290 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00dfa2a0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00dfa2b0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00dfa2c0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00dfa2d0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00dfa2e0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00dfa2f0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00dfa300 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00dfa310 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00dfa320 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00dfa330 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00dfa340 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00dfa350 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00dfa360 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00dfa370 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dfa380 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00dfa390 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00dfa3a0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00dfa3b0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00dfa3c0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00dfa3d0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00dfa3e0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00dfa3f0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00dfa400 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00dfa410 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00dfa420 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00dfa430 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00dfa440 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00dfa450 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00dfa460 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00dfa470 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00dfa480 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00dfa490 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00dfa4a0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00dfa4b0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00dfa4c0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00dfa4d0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00dfa4e0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00dfa4f0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00dfa500 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00dfa510 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00dfa520 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dfa530 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00dfa540 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00dfa550 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00dfa560 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00dfa570 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00dfa580 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00dfa590 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00dfa5a0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00dfa5b0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00dfa5c0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00dfa5d0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00dfa5e0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00dfa5f0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00dfa600 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00dfa610 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00dfa620 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00dfa630 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00dfa640 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00dfa650 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00dfa660 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00dfa670 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00dfa680 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00dfa690 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00dfa6a0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00dfa6b0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00dfa6c0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00dfa6d0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00dfa6e0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00dfa6f0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00dfa700 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00dfa710 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00dfa720 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00dfa730 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00dfa740 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00dfa750 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00dfa760 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ - 0x00dfa770 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ - 0x00dfa780 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ - 0x00dfa790 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ - 0x00dfa7a0 293b200a 20202020 76656334 2074696c ); . vec4 til │ │ │ │ - 0x00dfa7b0 65436f6f 7264734d 696e4d61 78203d20 eCoordsMinMax = │ │ │ │ - 0x00dfa7c0 755f7469 6c65436f 6f726473 4d696e4d u_tileCoordsMinM │ │ │ │ - 0x00dfa7d0 61785b67 6c5f496e 7374616e 63654944 ax[gl_InstanceID │ │ │ │ - 0x00dfa7e0 5d3b200a 20202020 76656332 20776f72 ]; . vec2 wor │ │ │ │ - 0x00dfa7f0 6c64506f 73203d20 6d697828 74696c65 ldPos = mix(tile │ │ │ │ - 0x00dfa800 436f6f72 64734d69 6e4d6178 2e78792c CoordsMinMax.xy, │ │ │ │ - 0x00dfa810 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ - 0x00dfa820 782e7a77 2c207175 61645665 72746578 x.zw, quadVertex │ │ │ │ - 0x00dfa830 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00dfa840 203d2076 65633428 776f726c 64506f73 = vec4(worldPos │ │ │ │ - 0x00dfa850 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00dfa860 6d6f6465 6c566965 77202a20 755f7072 modelView * u_pr │ │ │ │ - 0x00dfa870 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00dfa880 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00dfa890 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00dfa8a0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00dfa8b0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00dfa8c0 20202076 65633420 74657874 75726552 vec4 textureR │ │ │ │ - 0x00dfa8d0 6563744d 696e4d61 78203d20 755f7465 ectMinMax = u_te │ │ │ │ - 0x00dfa8e0 78747572 65526563 744d696e 4d61785b xtureRectMinMax[ │ │ │ │ - 0x00dfa8f0 676c5f49 6e737461 6e636549 445d3b20 gl_InstanceID]; │ │ │ │ - 0x00dfa900 0a202020 20766563 32207465 78555620 . vec2 texUV │ │ │ │ - 0x00dfa910 3d206d69 78287465 78747572 65526563 = mix(textureRec │ │ │ │ - 0x00dfa920 744d696e 4d61782e 78792c20 74657874 tMinMax.xy, text │ │ │ │ - 0x00dfa930 75726552 6563744d 696e4d61 782e7a77 ureRectMinMax.zw │ │ │ │ - 0x00dfa940 2c207175 61645665 72746578 293b200a , quadVertex); . │ │ │ │ - 0x00dfa950 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ - 0x00dfa960 3d207665 63332874 65785556 2c20666c = vec3(texUV, fl │ │ │ │ - 0x00dfa970 6f617428 755f7465 78747572 65496e64 oat(u_textureInd │ │ │ │ - 0x00dfa980 65785b67 6c5f496e 7374616e 63654944 ex[gl_InstanceID │ │ │ │ - 0x00dfa990 5d29293b 200a2020 7d200a00 00000000 ])); . } ...... │ │ │ │ - 0x00dfa9a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfa9b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfa9c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfa9d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfa9e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfa9f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfaa00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfaa10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfaa20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfaa30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfaa40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfaa50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfaa60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfaa70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfaa80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfaa90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfaaa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfaab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfaac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfaad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfaae0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00dfaaf0 726d204d 45444955 4d5f5020 73616d70 rm MEDIUM_P samp │ │ │ │ - 0x00dfab00 6c657232 44417272 61792075 5f636f6c ler2DArray u_col │ │ │ │ - 0x00dfab10 6f725465 783b200a 2020696e 20766563 orTex; . in vec │ │ │ │ - 0x00dfab20 3320765f 74657843 6f6f7264 733b200a 3 v_texCoords; . │ │ │ │ - 0x00dfab30 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00dfab40 67436f6c 6f723b20 0a202063 6f6e7374 gColor; . const │ │ │ │ - 0x00dfab50 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00dfab60 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00dfab70 303b200a 20204c4f 575f5020 76656333 0; . LOW_P vec3 │ │ │ │ - 0x00dfab80 204d6f64 756c6174 65427950 61747465 ModulateByPatte │ │ │ │ - 0x00dfab90 726e446f 7473284c 4f575f50 20766563 rnDots(LOW_P vec │ │ │ │ - 0x00dfaba0 3320636f 6c6f722c 20666c6f 61742064 3 color, float d │ │ │ │ - 0x00dfabb0 61726b65 6e2c2066 6c6f6174 20636f76 arken, float cov │ │ │ │ - 0x00dfabc0 65726167 6529200a 20207b20 0a202020 erage) . { . │ │ │ │ - 0x00dfabd0 20636f6e 73742066 6c6f6174 206b4c69 const float kLi │ │ │ │ - 0x00dfabe0 67687465 6e203d20 302e3037 353b200a ghten = 0.075; . │ │ │ │ - 0x00dfabf0 20202020 69662028 646f7428 636f6c6f if (dot(colo │ │ │ │ - 0x00dfac00 722c2076 65633328 302e3231 32362c20 r, vec3(0.2126, │ │ │ │ - 0x00dfac10 302e3731 35322c20 302e3037 32322929 0.7152, 0.0722)) │ │ │ │ - 0x00dfac20 203c2030 2e352920 0a202020 20202072 < 0.5) . r │ │ │ │ - 0x00dfac30 65747572 6e20636f 6c6f7220 2b20636f eturn color + co │ │ │ │ - 0x00dfac40 76657261 6765202a 206b4c69 67687465 verage * kLighte │ │ │ │ - 0x00dfac50 6e3b200a 20202020 72657475 726e2063 n; . return c │ │ │ │ - 0x00dfac60 6f6c6f72 202a206d 69782831 2e302c20 olor * mix(1.0, │ │ │ │ - 0x00dfac70 6461726b 656e2c20 636f7665 72616765 darken, coverage │ │ │ │ - 0x00dfac80 293b200a 20207d20 0a202076 6f696420 ); . } . void │ │ │ │ - 0x00dfac90 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00dfaca0 20765f46 72616743 6f6c6f72 203d2074 v_FragColor = t │ │ │ │ - 0x00dfacb0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00dfacc0 782c2076 5f746578 436f6f72 6473293b x, v_texCoords); │ │ │ │ - 0x00dfacd0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00dface0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfacf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfad00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfad10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfad20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfad30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfad40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfad50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfad60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfad70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfad80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfad90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfada0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfadb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfadc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfadd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfade0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfadf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfae00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfae10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfae20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfae30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00dfae40 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ - 0x00dfae50 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00dfae60 2020696e 20666c6f 61742076 5f68616c in float v_hal │ │ │ │ - 0x00dfae70 664c656e 6774683b 200a2020 6f757420 fLength; . out │ │ │ │ - 0x00dfae80 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ - 0x00dfae90 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00dfaea0 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00dfaeb0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00dfaec0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00dfaed0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00dfaee0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00dfaef0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00dfaf00 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ - 0x00dfaf10 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00dfaf20 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00dfaf30 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00dfaf40 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ - 0x00dfaf50 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00dfaf60 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ - 0x00dfaf70 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00dfaf80 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ - 0x00dfaf90 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00dfafa0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00dfafb0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00dfafc0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00dfafd0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00dfafe0 32442075 5f6d6173 6b546578 3b200a20 2D u_maskTex; . │ │ │ │ - 0x00dfaff0 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ - 0x00dfb000 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ - 0x00dfb010 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ - 0x00dfb020 6f6e7374 20666c6f 6174206b 4f75746c onst float kOutl │ │ │ │ - 0x00dfb030 696e6554 68726573 686f6c64 31203d20 ineThreshold1 = │ │ │ │ - 0x00dfb040 302e383b 200a2020 636f6e73 7420666c 0.8; . const fl │ │ │ │ - 0x00dfb050 6f617420 6b4f7574 6c696e65 54687265 oat kOutlineThre │ │ │ │ - 0x00dfb060 73686f6c 6432203d 20302e35 3b200a20 shold2 = 0.5; . │ │ │ │ - 0x00dfb070 20636f6e 73742066 6c6f6174 206b4d61 const float kMa │ │ │ │ - 0x00dfb080 736b4f70 61636974 79203d20 302e373b skOpacity = 0.7; │ │ │ │ - 0x00dfb090 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00dfb0a0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00dfb0b0 72203d20 31303030 2e303b20 0a20204c r = 1000.0; . L │ │ │ │ - 0x00dfb0c0 4f575f50 20766563 33204d6f 64756c61 OW_P vec3 Modula │ │ │ │ - 0x00dfb0d0 74654279 50617474 65726e44 6f747328 teByPatternDots( │ │ │ │ - 0x00dfb0e0 4c4f575f 50207665 63332063 6f6c6f72 LOW_P vec3 color │ │ │ │ - 0x00dfb0f0 2c20666c 6f617420 6461726b 656e2c20 , float darken, │ │ │ │ - 0x00dfb100 666c6f61 7420636f 76657261 67652920 float coverage) │ │ │ │ - 0x00dfb110 0a20207b 200a2020 2020636f 6e737420 . { . const │ │ │ │ - 0x00dfb120 666c6f61 74206b4c 69676874 656e203d float kLighten = │ │ │ │ - 0x00dfb130 20302e30 37353b20 0a202020 20696620 0.075; . if │ │ │ │ - 0x00dfb140 28646f74 28636f6c 6f722c20 76656333 (dot(color, vec3 │ │ │ │ - 0x00dfb150 28302e32 3132362c 20302e37 3135322c (0.2126, 0.7152, │ │ │ │ - 0x00dfb160 20302e30 37323229 29203c20 302e3529 0.0722)) < 0.5) │ │ │ │ - 0x00dfb170 200a2020 20202020 72657475 726e2063 . return c │ │ │ │ - 0x00dfb180 6f6c6f72 202b2063 6f766572 61676520 olor + coverage │ │ │ │ - 0x00dfb190 2a206b4c 69676874 656e3b20 0a202020 * kLighten; . │ │ │ │ - 0x00dfb1a0 20726574 75726e20 636f6c6f 72202a20 return color * │ │ │ │ - 0x00dfb1b0 6d697828 312e302c 20646172 6b656e2c mix(1.0, darken, │ │ │ │ - 0x00dfb1c0 20636f76 65726167 65293b20 0a20207d coverage); . } │ │ │ │ - 0x00dfb1d0 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00dfb1e0 0a20207b 200a2020 20207665 63342063 . { . vec4 c │ │ │ │ - 0x00dfb1f0 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00dfb200 5f636f6c 6f725465 782c2076 5f636f6c _colorTex, v_col │ │ │ │ - 0x00dfb210 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ - 0x00dfb220 2020666c 6f617420 616c7068 61436f64 float alphaCod │ │ │ │ - 0x00dfb230 65203d20 636f6c6f 722e613b 200a2020 e = color.a; . │ │ │ │ - 0x00dfb240 20207665 6334206d 61736b20 3d207465 vec4 mask = te │ │ │ │ - 0x00dfb250 78747572 6528755f 6d61736b 5465782c xture(u_maskTex, │ │ │ │ - 0x00dfb260 20765f6d 61736b54 6578436f 6f726429 v_maskTexCoord) │ │ │ │ - 0x00dfb270 3b200a20 20202063 6f6c6f72 2e61203d ; . color.a = │ │ │ │ - 0x00dfb280 20755f6f 70616369 7479202a 2028312e u_opacity * (1. │ │ │ │ - 0x00dfb290 30202d20 736d6f6f 74687374 6570286b 0 - smoothstep(k │ │ │ │ - 0x00dfb2a0 416e7469 616c6961 73696e67 54687265 AntialiasingThre │ │ │ │ - 0x00dfb2b0 73686f6c 642c2031 2e302c20 61627328 shold, 1.0, abs( │ │ │ │ - 0x00dfb2c0 765f6861 6c664c65 6e677468 2929293b v_halfLength))); │ │ │ │ - 0x00dfb2d0 200a2020 2020636f 6c6f722e 72676220 . color.rgb │ │ │ │ - 0x00dfb2e0 3d206d69 7828636f 6c6f722e 7267622c = mix(color.rgb, │ │ │ │ - 0x00dfb2f0 206d6173 6b2e7267 62202a20 6d697828 mask.rgb * mix( │ │ │ │ - 0x00dfb300 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ - 0x00dfb310 722e7267 622c2075 5f646172 6b417272 r.rgb, u_darkArr │ │ │ │ - 0x00dfb320 6f77436f 6c6f722e 7267622c 20737465 owColor.rgb, ste │ │ │ │ - 0x00dfb330 7028616c 70686143 6f64652c 20302e36 p(alphaCode, 0.6 │ │ │ │ - 0x00dfb340 29292c20 6d61736b 2e61202a 206b4d61 )), mask.a * kMa │ │ │ │ - 0x00dfb350 736b4f70 61636974 79293b20 0a202020 skOpacity); . │ │ │ │ - 0x00dfb360 20696620 28755f6f 75746c69 6e65203e if (u_outline > │ │ │ │ - 0x00dfb370 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00dfb380 20202020 636f6c6f 722e7267 62203d20 color.rgb = │ │ │ │ - 0x00dfb390 6d697828 636f6c6f 722e7267 622c2075 mix(color.rgb, u │ │ │ │ - 0x00dfb3a0 5f6f7574 6c696e65 436f6c6f 722e7267 _outlineColor.rg │ │ │ │ - 0x00dfb3b0 622c2073 74657028 6b4f7574 6c696e65 b, step(kOutline │ │ │ │ - 0x00dfb3c0 54687265 73686f6c 64312c20 61627328 Threshold1, abs( │ │ │ │ - 0x00dfb3d0 765f6861 6c664c65 6e677468 2929293b v_halfLength))); │ │ │ │ - 0x00dfb3e0 200a2020 20202020 636f6c6f 722e7267 . color.rg │ │ │ │ - 0x00dfb3f0 62203d20 6d697828 636f6c6f 722e7267 b = mix(color.rg │ │ │ │ - 0x00dfb400 622c2075 5f6f7574 6c696e65 436f6c6f b, u_outlineColo │ │ │ │ - 0x00dfb410 722e7267 622c2073 6d6f6f74 68737465 r.rgb, smoothste │ │ │ │ - 0x00dfb420 70286b4f 75746c69 6e655468 72657368 p(kOutlineThresh │ │ │ │ - 0x00dfb430 6f6c6432 2c206b4f 75746c69 6e655468 old2, kOutlineTh │ │ │ │ - 0x00dfb440 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ - 0x00dfb450 68616c66 4c656e67 74682929 293b200a halfLength))); . │ │ │ │ - 0x00dfb460 20202020 7d200a20 20202076 5f467261 } . v_Fra │ │ │ │ - 0x00dfb470 67436f6c 6f72203d 20636f6c 6f723b20 gColor = color; │ │ │ │ - 0x00dfb480 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00dfb490 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dfb4a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfb4b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfb4c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfb4d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfb4e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfb4f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfb500 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfb510 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfb520 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfb530 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfb540 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfb550 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfb560 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfb570 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfb580 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfb590 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfb5a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfb5b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfb5c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfb5d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfb5e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfb5f0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dfb600 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00dfb610 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00dfb620 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00dfb630 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00dfb640 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00dfb650 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ - 0x00dfb660 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ - 0x00dfb670 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ - 0x00dfb680 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ - 0x00dfb690 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00dfb6a0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00dfb6b0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00dfb6c0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00dfb6d0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00dfb6e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00dfb6f0 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ - 0x00dfb700 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00dfb710 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ - 0x00dfb720 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00dfb730 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ - 0x00dfb740 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00dfb750 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ - 0x00dfb760 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00dfb770 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ - 0x00dfb780 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ - 0x00dfb790 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ - 0x00dfb7a0 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ - 0x00dfb7b0 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ - 0x00dfb7c0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00dfb7d0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00dfb7e0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00dfb7f0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00dfb800 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00dfb810 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00dfb820 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00dfb830 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00dfb840 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00dfb850 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00dfb860 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00dfb870 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00dfb880 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00dfb890 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00dfb8a0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00dfb8b0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00dfb8c0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00dfb8d0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00dfb8e0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00dfb8f0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00dfb900 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dfb910 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00dfb920 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00dfb930 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00dfb940 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00dfb950 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00dfb960 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00dfb970 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00dfb980 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00dfb990 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00dfb9a0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00dfb9b0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00dfb9c0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00dfb9d0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00dfb9e0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00dfb9f0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00dfba00 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00dfba10 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00dfba20 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00dfba30 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00dfba40 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00dfba50 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00dfba60 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00dfba70 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00dfba80 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00dfba90 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00dfbaa0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00dfbab0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00dfbac0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00dfbad0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00dfbae0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00dfbaf0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00dfbb00 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00dfbb10 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00dfbb20 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00dfbb30 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00dfbb40 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00dfbb50 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00dfbb60 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00dfbb70 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00dfbb80 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00dfbb90 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00dfbba0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00dfbbb0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00dfbbc0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00dfbbd0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00dfbbe0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00dfbbf0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00dfbc00 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00dfbc10 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00dfbc20 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00dfbc30 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00dfbc40 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00dfbc50 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00dfbc60 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00dfbc70 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00dfbc80 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00dfbc90 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00dfbca0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00dfbcb0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00dfbcc0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00dfbcd0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00dfbce0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00dfbcf0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00dfbd00 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00dfbd10 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00dfbd20 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00dfbd30 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00dfbd40 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00dfbd50 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00dfbd60 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ - 0x00dfbd70 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ - 0x00dfbd80 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00dfbd90 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00dfbda0 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00dfbdb0 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00dfbdc0 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00dfbdd0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00dfbde0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00dfbdf0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00dfbe00 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00dfbe10 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ - 0x00dfbe20 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ - 0x00dfbe30 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ - 0x00dfbe40 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ - 0x00dfbe50 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ - 0x00dfbe60 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00dfbe70 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ - 0x00dfbe80 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00dfbe90 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00dfbea0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00dfbeb0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00dfbec0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00dfbed0 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ - 0x00dfbee0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfbef0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfbf00 20202020 20202020 20202020 20755f6d u_m │ │ │ │ - 0x00dfbf10 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ - 0x00dfbf20 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ - 0x00dfbf30 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ - 0x00dfbf40 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ - 0x00dfbf50 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ - 0x00dfbf60 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ - 0x00dfbf70 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ - 0x00dfbf80 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ - 0x00dfbf90 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ - 0x00dfbfa0 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00dfbfb0 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ - 0x00dfbfc0 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ - 0x00dfbfd0 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ - 0x00dfbfe0 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ - 0x00dfbff0 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ - 0x00dfc000 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ - 0x00dfc010 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ - 0x00dfc020 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ - 0x00dfc030 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ - 0x00dfc040 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ - 0x00dfc050 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00dfc060 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ - 0x00dfc070 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ - 0x00dfc080 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ - 0x00dfc090 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ - 0x00dfc0a0 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ - 0x00dfc0b0 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ - 0x00dfc0c0 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00dfc0d0 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ - 0x00dfc0e0 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00dfc0f0 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ - 0x00dfc100 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ - 0x00dfc110 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ - 0x00dfc120 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ - 0x00dfc130 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ - 0x00dfc140 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00dfc150 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ - 0x00dfc160 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfc170 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfc180 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfc190 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfc1a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfc1b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfc1c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfc1d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfc1e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfc1f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfc200 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfc210 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfc220 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfc230 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfc240 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfc250 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfc260 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfc270 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfc280 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfc290 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfc2a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfc2b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00dfc2c0 72643b20 0a202069 6e207665 63332076 rd; . in vec3 v │ │ │ │ - 0x00dfc2d0 5f726164 6975733b 200a2020 6f757420 _radius; . out │ │ │ │ - 0x00dfc2e0 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ - 0x00dfc2f0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00dfc300 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00dfc310 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00dfc320 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00dfc330 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00dfc340 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00dfc350 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00dfc360 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ - 0x00dfc370 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00dfc380 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00dfc390 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00dfc3a0 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ - 0x00dfc3b0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00dfc3c0 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ - 0x00dfc3d0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00dfc3e0 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ - 0x00dfc3f0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00dfc400 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00dfc410 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00dfc420 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00dfc430 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ - 0x00dfc440 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ - 0x00dfc450 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ - 0x00dfc460 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00dfc470 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00dfc480 3030302e 303b200a 20204c4f 575f5020 000.0; . LOW_P │ │ │ │ - 0x00dfc490 76656333 204d6f64 756c6174 65427950 vec3 ModulateByP │ │ │ │ - 0x00dfc4a0 61747465 726e446f 7473284c 4f575f50 atternDots(LOW_P │ │ │ │ - 0x00dfc4b0 20766563 3320636f 6c6f722c 20666c6f vec3 color, flo │ │ │ │ - 0x00dfc4c0 61742064 61726b65 6e2c2066 6c6f6174 at darken, float │ │ │ │ - 0x00dfc4d0 20636f76 65726167 6529200a 20207b20 coverage) . { │ │ │ │ - 0x00dfc4e0 0a202020 20636f6e 73742066 6c6f6174 . const float │ │ │ │ - 0x00dfc4f0 206b4c69 67687465 6e203d20 302e3037 kLighten = 0.07 │ │ │ │ - 0x00dfc500 353b200a 20202020 69662028 646f7428 5; . if (dot( │ │ │ │ - 0x00dfc510 636f6c6f 722c2076 65633328 302e3231 color, vec3(0.21 │ │ │ │ - 0x00dfc520 32362c20 302e3731 35322c20 302e3037 26, 0.7152, 0.07 │ │ │ │ - 0x00dfc530 32322929 203c2030 2e352920 0a202020 22)) < 0.5) . │ │ │ │ - 0x00dfc540 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ - 0x00dfc550 2b20636f 76657261 6765202a 206b4c69 + coverage * kLi │ │ │ │ - 0x00dfc560 67687465 6e3b200a 20202020 72657475 ghten; . retu │ │ │ │ - 0x00dfc570 726e2063 6f6c6f72 202a206d 69782831 rn color * mix(1 │ │ │ │ - 0x00dfc580 2e302c20 6461726b 656e2c20 636f7665 .0, darken, cove │ │ │ │ - 0x00dfc590 72616765 293b200a 20207d20 0a202076 rage); . } . v │ │ │ │ - 0x00dfc5a0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00dfc5b0 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ - 0x00dfc5c0 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ - 0x00dfc5d0 72546578 2c20765f 636f6c6f 72546578 rTex, v_colorTex │ │ │ │ - 0x00dfc5e0 436f6f72 64293b20 0a202020 20666c6f Coord); . flo │ │ │ │ - 0x00dfc5f0 61742073 6d616c6c 52616469 7573203d at smallRadius = │ │ │ │ - 0x00dfc600 20765f72 61646975 732e7a20 2a206b41 v_radius.z * kA │ │ │ │ - 0x00dfc610 6e746961 6c696173 696e6754 68726573 ntialiasingThres │ │ │ │ - 0x00dfc620 686f6c64 3b200a20 20202066 6c6f6174 hold; . float │ │ │ │ - 0x00dfc630 20737465 7056616c 7565203d 20736d6f stepValue = smo │ │ │ │ - 0x00dfc640 6f746873 74657028 736d616c 6c526164 othstep(smallRad │ │ │ │ - 0x00dfc650 69757320 2a20736d 616c6c52 61646975 ius * smallRadiu │ │ │ │ - 0x00dfc660 732c2076 5f726164 6975732e 7a202a20 s, v_radius.z * │ │ │ │ - 0x00dfc670 765f7261 64697573 2e7a2c20 0a202020 v_radius.z, . │ │ │ │ - 0x00dfc680 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfc690 20202020 20202020 20202020 2020765f v_ │ │ │ │ - 0x00dfc6a0 72616469 75732e78 202a2076 5f726164 radius.x * v_rad │ │ │ │ - 0x00dfc6b0 6975732e 78202b20 765f7261 64697573 ius.x + v_radius │ │ │ │ - 0x00dfc6c0 2e79202a 20765f72 61646975 732e7929 .y * v_radius.y) │ │ │ │ - 0x00dfc6d0 3b200a20 20202063 6f6c6f72 2e61203d ; . color.a = │ │ │ │ - 0x00dfc6e0 20755f6f 70616369 7479202a 2028312e u_opacity * (1. │ │ │ │ - 0x00dfc6f0 30202d20 73746570 56616c75 65293b20 0 - stepValue); │ │ │ │ - 0x00dfc700 0a202020 20696620 28636f6c 6f722e61 . if (color.a │ │ │ │ - 0x00dfc710 203c2030 2e303129 200a2020 20202020 < 0.01) . │ │ │ │ - 0x00dfc720 64697363 6172643b 200a2020 2020765f discard; . v_ │ │ │ │ - 0x00dfc730 46726167 436f6c6f 72203d20 636f6c6f FragColor = colo │ │ │ │ - 0x00dfc740 723b200a 20207d20 0a000000 00000000 r; . } ........ │ │ │ │ - 0x00dfc750 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dfc760 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfc770 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfc780 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfc790 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfc7a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfc7b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfc7c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfc7d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfc7e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfc7f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfc800 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfc810 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfc820 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfc830 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfc840 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfc850 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfc860 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfc870 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfc880 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfc890 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfc8a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfc8b0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00dfc8c0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00dfc8d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00dfc8e0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00dfc8f0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00dfc900 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00dfc910 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ - 0x00dfc920 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ - 0x00dfc930 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00dfc940 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00dfc950 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00dfc960 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00dfc970 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00dfc980 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00dfc990 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ - 0x00dfc9a0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00dfc9b0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00dfc9c0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00dfc9d0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ - 0x00dfc9e0 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00dfc9f0 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ - 0x00dfca00 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00dfca10 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ - 0x00dfca20 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00dfca30 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00dfca40 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00dfca50 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00dfca60 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00dfca70 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00dfca80 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00dfca90 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00dfcaa0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00dfcab0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00dfcac0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00dfcad0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00dfcae0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00dfcaf0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dfcb00 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00dfcb10 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00dfcb20 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00dfcb30 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00dfcb40 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00dfcb50 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00dfcb60 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00dfcb70 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00dfcb80 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00dfcb90 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00dfcba0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00dfcbb0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00dfcbc0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dfcbd0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00dfcbe0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00dfcbf0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dfcc00 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00dfcc10 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00dfcc20 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00dfcc30 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00dfcc40 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00dfcc50 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00dfcc60 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00dfcc70 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00dfcc80 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00dfcc90 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00dfcca0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00dfccb0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00dfccc0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00dfccd0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00dfcce0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00dfccf0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00dfcd00 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00dfcd10 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00dfcd20 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00dfcd30 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00dfcd40 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00dfcd50 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00dfcd60 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00dfcd70 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00dfcd80 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00dfcd90 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00dfcda0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dfcdb0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00dfcdc0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00dfcdd0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00dfcde0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00dfcdf0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00dfce00 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00dfce10 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00dfce20 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00dfce30 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00dfce40 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00dfce50 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00dfce60 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00dfce70 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00dfce80 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00dfce90 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00dfcea0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00dfceb0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00dfcec0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00dfced0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00dfcee0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00dfcef0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00dfcf00 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00dfcf10 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00dfcf20 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00dfcf30 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00dfcf40 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00dfcf50 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00dfcf60 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00dfcf70 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00dfcf80 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00dfcf90 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00dfcfa0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00dfcfb0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00dfcfc0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00dfcfd0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00dfcfe0 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ - 0x00dfcff0 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ - 0x00dfd000 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ - 0x00dfd010 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ - 0x00dfd020 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ - 0x00dfd030 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ - 0x00dfd040 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00dfd050 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ - 0x00dfd060 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ - 0x00dfd070 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ - 0x00dfd080 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ - 0x00dfd090 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00dfd0a0 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ - 0x00dfd0b0 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ - 0x00dfd0c0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00dfd0d0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00dfd0e0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00dfd0f0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00dfd100 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00dfd110 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ - 0x00dfd120 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ - 0x00dfd130 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ - 0x00dfd140 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00dfd150 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ - 0x00dfd160 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ - 0x00dfd170 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00dfd180 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ - 0x00dfd190 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ - 0x00dfd1a0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfd1b0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfd1c0 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00dfd1d0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ - 0x00dfd1e0 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ - 0x00dfd1f0 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ - 0x00dfd200 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ - 0x00dfd210 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ - 0x00dfd220 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ - 0x00dfd230 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ - 0x00dfd240 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ - 0x00dfd250 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00dfd260 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ - 0x00dfd270 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ - 0x00dfd280 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ - 0x00dfd290 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ - 0x00dfd2a0 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ - 0x00dfd2b0 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ - 0x00dfd2c0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00dfd2d0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00dfd2e0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00dfd2f0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00dfd300 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00dfd310 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00dfd320 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00dfd330 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dfd340 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfd350 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfd360 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfd370 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfd380 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfd390 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfd3a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfd3b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfd3c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfd3d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfd3e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfd3f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfd400 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfd410 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfd420 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfd430 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfd440 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfd450 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfd460 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfd470 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfd480 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfd490 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00dfd4a0 72643b20 0a20206f 75742076 65633420 rd; . out vec4 │ │ │ │ - 0x00dfd4b0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00dfd4c0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00dfd4d0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00dfd4e0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00dfd4f0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00dfd500 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00dfd510 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dfd520 666f726d 20766563 3420755f 74726166 form vec4 u_traf │ │ │ │ - 0x00dfd530 66696350 6172616d 733b200a 2020756e ficParams; . un │ │ │ │ - 0x00dfd540 69666f72 6d207665 63342075 5f6f7574 iform vec4 u_out │ │ │ │ - 0x00dfd550 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ - 0x00dfd560 69666f72 6d207665 63342075 5f6c6967 iform vec4 u_lig │ │ │ │ - 0x00dfd570 68744172 726f7743 6f6c6f72 3b200a20 htArrowColor; . │ │ │ │ - 0x00dfd580 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00dfd590 6461726b 4172726f 77436f6c 6f723b20 darkArrowColor; │ │ │ │ - 0x00dfd5a0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00dfd5b0 20755f6f 75746c69 6e653b20 0a202075 u_outline; . u │ │ │ │ - 0x00dfd5c0 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ - 0x00dfd5d0 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ - 0x00dfd5e0 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00dfd5f0 6f6c6f72 5465783b 200a2020 636f6e73 olorTex; . cons │ │ │ │ - 0x00dfd600 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00dfd610 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00dfd620 2e303b20 0a20204c 4f575f50 20766563 .0; . LOW_P vec │ │ │ │ - 0x00dfd630 33204d6f 64756c61 74654279 50617474 3 ModulateByPatt │ │ │ │ - 0x00dfd640 65726e44 6f747328 4c4f575f 50207665 ernDots(LOW_P ve │ │ │ │ - 0x00dfd650 63332063 6f6c6f72 2c20666c 6f617420 c3 color, float │ │ │ │ - 0x00dfd660 6461726b 656e2c20 666c6f61 7420636f darken, float co │ │ │ │ - 0x00dfd670 76657261 67652920 0a20207b 200a2020 verage) . { . │ │ │ │ - 0x00dfd680 2020636f 6e737420 666c6f61 74206b4c const float kL │ │ │ │ - 0x00dfd690 69676874 656e203d 20302e30 37353b20 ighten = 0.075; │ │ │ │ - 0x00dfd6a0 0a202020 20696620 28646f74 28636f6c . if (dot(col │ │ │ │ - 0x00dfd6b0 6f722c20 76656333 28302e32 3132362c or, vec3(0.2126, │ │ │ │ - 0x00dfd6c0 20302e37 3135322c 20302e30 37323229 0.7152, 0.0722) │ │ │ │ - 0x00dfd6d0 29203c20 302e3529 200a2020 20202020 ) < 0.5) . │ │ │ │ - 0x00dfd6e0 72657475 726e2063 6f6c6f72 202b2063 return color + c │ │ │ │ - 0x00dfd6f0 6f766572 61676520 2a206b4c 69676874 overage * kLight │ │ │ │ - 0x00dfd700 656e3b20 0a202020 20726574 75726e20 en; . return │ │ │ │ - 0x00dfd710 636f6c6f 72202a20 6d697828 312e302c color * mix(1.0, │ │ │ │ - 0x00dfd720 20646172 6b656e2c 20636f76 65726167 darken, coverag │ │ │ │ - 0x00dfd730 65293b20 0a20207d 200a2020 766f6964 e); . } . void │ │ │ │ - 0x00dfd740 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00dfd750 20207665 63342063 6f6c6f72 203d2074 vec4 color = t │ │ │ │ - 0x00dfd760 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00dfd770 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ - 0x00dfd780 7264293b 200a2020 2020765f 46726167 rd); . v_Frag │ │ │ │ - 0x00dfd790 436f6c6f 72203d20 76656334 28636f6c Color = vec4(col │ │ │ │ - 0x00dfd7a0 6f722e72 67622c20 755f6f70 61636974 or.rgb, u_opacit │ │ │ │ - 0x00dfd7b0 79293b20 0a20207d 200a0000 00000000 y); . } ....... │ │ │ │ - 0x00dfd7c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfd7d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfd7e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfd7f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfd800 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfd810 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfd820 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfd830 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfd840 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfd850 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfd860 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfd870 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfd880 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfd890 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfd8a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfd8b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfd8c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfd8d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfd8e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfd8f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfd900 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfd910 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dfd920 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00dfd930 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ - 0x00dfd940 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00dfd950 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ - 0x00dfd960 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00dfd970 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00dfd980 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00dfd990 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00dfd9a0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00dfd9b0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00dfd9c0 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ - 0x00dfd9d0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00dfd9e0 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ - 0x00dfd9f0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00dfda00 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ - 0x00dfda10 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ - 0x00dfda20 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ - 0x00dfda30 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ - 0x00dfda40 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ - 0x00dfda50 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ - 0x00dfda60 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00dfda70 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00dfda80 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00dfda90 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00dfdaa0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00dfdab0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00dfdac0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00dfdad0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00dfdae0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00dfdaf0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00dfdb00 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00dfdb10 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00dfdb20 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00dfdb30 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00dfdb40 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00dfdb50 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00dfdb60 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00dfdb70 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00dfdb80 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00dfdb90 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00dfdba0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00dfdbb0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dfdbc0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00dfdbd0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00dfdbe0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dfdbf0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00dfdc00 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00dfdc10 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00dfdc20 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00dfdc30 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00dfdc40 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00dfdc50 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00dfdc60 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00dfdc70 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00dfdc80 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00dfdc90 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00dfdca0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00dfdcb0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00dfdcc0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00dfdcd0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00dfdce0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00dfdcf0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00dfdd00 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00dfdd10 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00dfdd20 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00dfdd30 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00dfdd40 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00dfdd50 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00dfdd60 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00dfdd70 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00dfdd80 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00dfdd90 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00dfdda0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00dfddb0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00dfddc0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00dfddd0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00dfdde0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00dfddf0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00dfde00 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00dfde10 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00dfde20 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00dfde30 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00dfde40 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00dfde50 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00dfde60 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00dfde70 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00dfde80 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00dfde90 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00dfdea0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00dfdeb0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00dfdec0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00dfded0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00dfdee0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00dfdef0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00dfdf00 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00dfdf10 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00dfdf20 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00dfdf30 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00dfdf40 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00dfdf50 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00dfdf60 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00dfdf70 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00dfdf80 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00dfdf90 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00dfdfa0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00dfdfb0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00dfdfc0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00dfdfd0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00dfdfe0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00dfdff0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00dfe000 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00dfe010 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00dfe020 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00dfe030 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00dfe040 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00dfe050 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00dfe060 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ - 0x00dfe070 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00dfe080 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ - 0x00dfe090 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ - 0x00dfe0a0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00dfe0b0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00dfe0c0 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00dfe0d0 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ - 0x00dfe0e0 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00dfe0f0 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00dfe100 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00dfe110 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ - 0x00dfe120 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dfe130 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dfe140 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfe150 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfe160 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfe170 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfe180 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfe190 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfe1a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfe1b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfe1c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfe1d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfe1e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfe1f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfe200 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfe210 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfe220 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfe230 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfe240 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfe250 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfe260 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfe270 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfe280 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfe290 63342076 5f636f6c 6f723b20 0a20206f c4 v_color; . o │ │ │ │ - 0x00dfe2a0 75742076 65633420 765f4672 6167436f ut vec4 v_FragCo │ │ │ │ - 0x00dfe2b0 6c6f723b 200a2020 636f6e73 7420666c lor; . const fl │ │ │ │ - 0x00dfe2c0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00dfe2d0 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00dfe2e0 0a20204c 4f575f50 20766563 33204d6f . LOW_P vec3 Mo │ │ │ │ - 0x00dfe2f0 64756c61 74654279 50617474 65726e44 dulateByPatternD │ │ │ │ - 0x00dfe300 6f747328 4c4f575f 50207665 63332063 ots(LOW_P vec3 c │ │ │ │ - 0x00dfe310 6f6c6f72 2c20666c 6f617420 6461726b olor, float dark │ │ │ │ - 0x00dfe320 656e2c20 666c6f61 7420636f 76657261 en, float covera │ │ │ │ - 0x00dfe330 67652920 0a20207b 200a2020 2020636f ge) . { . co │ │ │ │ - 0x00dfe340 6e737420 666c6f61 74206b4c 69676874 nst float kLight │ │ │ │ - 0x00dfe350 656e203d 20302e30 37353b20 0a202020 en = 0.075; . │ │ │ │ - 0x00dfe360 20696620 28646f74 28636f6c 6f722c20 if (dot(color, │ │ │ │ - 0x00dfe370 76656333 28302e32 3132362c 20302e37 vec3(0.2126, 0.7 │ │ │ │ - 0x00dfe380 3135322c 20302e30 37323229 29203c20 152, 0.0722)) < │ │ │ │ - 0x00dfe390 302e3529 200a2020 20202020 72657475 0.5) . retu │ │ │ │ - 0x00dfe3a0 726e2063 6f6c6f72 202b2063 6f766572 rn color + cover │ │ │ │ - 0x00dfe3b0 61676520 2a206b4c 69676874 656e3b20 age * kLighten; │ │ │ │ - 0x00dfe3c0 0a202020 20726574 75726e20 636f6c6f . return colo │ │ │ │ - 0x00dfe3d0 72202a20 6d697828 312e302c 20646172 r * mix(1.0, dar │ │ │ │ - 0x00dfe3e0 6b656e2c 20636f76 65726167 65293b20 ken, coverage); │ │ │ │ - 0x00dfe3f0 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00dfe400 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ - 0x00dfe410 46726167 436f6c6f 72203d20 765f636f FragColor = v_co │ │ │ │ - 0x00dfe420 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00dfe430 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dfe440 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfe450 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfe460 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfe470 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfe480 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfe490 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfe4a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfe4b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfe4c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfe4d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfe4e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfe4f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfe500 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfe510 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfe520 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfe530 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfe540 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfe550 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfe560 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfe570 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfe580 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfe590 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dfe5a0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00dfe5b0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00dfe5c0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00dfe5d0 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ - 0x00dfe5e0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00dfe5f0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00dfe600 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00dfe610 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00dfe620 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00dfe630 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00dfe640 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ - 0x00dfe650 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ - 0x00dfe660 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ - 0x00dfe670 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ - 0x00dfe680 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ - 0x00dfe690 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ - 0x00dfe6a0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00dfe6b0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00dfe6c0 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ - 0x00dfe6d0 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00dfe6e0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00dfe6f0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00dfe700 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ - 0x00dfe710 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ - 0x00dfe720 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00dfe730 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ - 0x00dfe740 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ - 0x00dfe750 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ - 0x00dfe760 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dfe770 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ - 0x00dfe780 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ - 0x00dfe790 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00dfe7a0 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ - 0x00dfe7b0 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ - 0x00dfe7c0 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ - 0x00dfe7d0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00dfe7e0 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ - 0x00dfe7f0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00dfe800 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00dfe810 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ - 0x00dfe820 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ - 0x00dfe830 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dfe840 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ - 0x00dfe850 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ - 0x00dfe860 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ - 0x00dfe870 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00dfe880 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ - 0x00dfe890 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ - 0x00dfe8a0 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ - 0x00dfe8b0 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ - 0x00dfe8c0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00dfe8d0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00dfe8e0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00dfe8f0 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ - 0x00dfe900 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ - 0x00dfe910 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ - 0x00dfe920 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ - 0x00dfe930 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ - 0x00dfe940 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ - 0x00dfe950 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00dfe960 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ - 0x00dfe970 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ - 0x00dfe980 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ - 0x00dfe990 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ - 0x00dfe9a0 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ - 0x00dfe9b0 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ - 0x00dfe9c0 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ - 0x00dfe9d0 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ - 0x00dfe9e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00dfe9f0 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ - 0x00dfea00 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ - 0x00dfea10 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ - 0x00dfea20 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ - 0x00dfea30 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ - 0x00dfea40 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ - 0x00dfea50 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ - 0x00dfea60 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ - 0x00dfea70 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ - 0x00dfea80 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ - 0x00dfea90 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ - 0x00dfeaa0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00dfeab0 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ - 0x00dfeac0 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ - 0x00dfead0 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ - 0x00dfeae0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00dfeaf0 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ - 0x00dfeb00 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ - 0x00dfeb10 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ - 0x00dfeb20 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ - 0x00dfeb30 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ - 0x00dfeb40 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ - 0x00dfeb50 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ - 0x00dfeb60 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ - 0x00dfeb70 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ - 0x00dfeb80 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ - 0x00dfeb90 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ - 0x00dfeba0 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ - 0x00dfebb0 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ - 0x00dfebc0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00dfebd0 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ - 0x00dfebe0 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ - 0x00dfebf0 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ - 0x00dfec00 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00dfec10 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ - 0x00dfec20 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00dfec30 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ - 0x00dfec40 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ - 0x00dfec50 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00dfec60 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00dfec70 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00dfec80 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00dfec90 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00dfeca0 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ - 0x00dfecb0 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ - 0x00dfecc0 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00dfecd0 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00dfece0 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ - 0x00dfecf0 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ - 0x00dfed00 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ - 0x00dfed10 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ - 0x00dfed20 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00dfed30 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ - 0x00dfed40 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00dfed50 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ - 0x00dfed60 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfed70 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfed80 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dfed90 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ - 0x00dfeda0 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ - 0x00dfedb0 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ - 0x00dfedc0 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00dfedd0 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00dfede0 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ - 0x00dfedf0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00dfee00 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ - 0x00dfee10 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ - 0x00dfee20 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ - 0x00dfee30 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00dfee40 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ - 0x00dfee50 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ - 0x00dfee60 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00dfee70 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00dfee80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dfee90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dfeea0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dfeeb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dfeec0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dfeed0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dfeee0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dfeef0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dfef00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dfef10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dfef20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dfef30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dfef40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dfef50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dfef60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dfef70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dfef80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dfef90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dfefa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dfefb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfefc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfefd0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00dfefe0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00dfeff0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00dff000 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ - 0x00dff010 73742066 6c6f6174 20616150 6978656c st float aaPixel │ │ │ │ - 0x00dff020 73436f75 6e74203d 20322e35 3b200a20 sCount = 2.5; . │ │ │ │ - 0x00dff030 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00dff040 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00dff050 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ - 0x00dff060 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ - 0x00dff070 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ - 0x00dff080 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ - 0x00dff090 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ - 0x00dff0a0 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ - 0x00dff0b0 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ - 0x00dff0c0 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ - 0x00dff0d0 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ - 0x00dff0e0 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ - 0x00dff0f0 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ - 0x00dff100 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ - 0x00dff110 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ - 0x00dff120 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ - 0x00dff130 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ - 0x00dff140 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ - 0x00dff150 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ - 0x00dff160 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ - 0x00dff170 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00dff180 7b200a20 20202076 65633420 66696e61 { . vec4 fina │ │ │ │ - 0x00dff190 6c436f6c 6f72203d 20765f63 6f6c6f72 lColor = v_color │ │ │ │ - 0x00dff1a0 3b200a20 20202066 6c6f6174 20736d61 ; . float sma │ │ │ │ - 0x00dff1b0 6c6c5261 64697573 203d2076 5f726164 llRadius = v_rad │ │ │ │ - 0x00dff1c0 6975732e 7a202d20 61615069 78656c73 ius.z - aaPixels │ │ │ │ - 0x00dff1d0 436f756e 743b200a 20202020 666c6f61 Count; . floa │ │ │ │ - 0x00dff1e0 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ - 0x00dff1f0 6f6f7468 73746570 28736d61 6c6c5261 oothstep(smallRa │ │ │ │ - 0x00dff200 64697573 202a2073 6d616c6c 52616469 dius * smallRadi │ │ │ │ - 0x00dff210 75732c20 765f7261 64697573 2e7a202a us, v_radius.z * │ │ │ │ - 0x00dff220 20765f72 61646975 732e7a2c 200a2020 v_radius.z, . │ │ │ │ - 0x00dff230 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dff240 20202020 20202020 20202020 2020646f do │ │ │ │ - 0x00dff250 7428765f 72616469 75732e78 792c2076 t(v_radius.xy, v │ │ │ │ - 0x00dff260 5f726164 6975732e 78792929 3b200a20 _radius.xy)); . │ │ │ │ - 0x00dff270 20202066 696e616c 436f6c6f 722e6120 finalColor.a │ │ │ │ - 0x00dff280 3d206669 6e616c43 6f6c6f72 2e61202a = finalColor.a * │ │ │ │ - 0x00dff290 2028312e 30202d20 73746570 56616c75 (1.0 - stepValu │ │ │ │ - 0x00dff2a0 65293b20 0a202020 20696620 2866696e e); . if (fin │ │ │ │ - 0x00dff2b0 616c436f 6c6f722e 61203c20 302e3031 alColor.a < 0.01 │ │ │ │ - 0x00dff2c0 29200a20 20202020 20646973 63617264 ) . discard │ │ │ │ - 0x00dff2d0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00dff2e0 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ - 0x00dff2f0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00dff300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dff310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dff320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dff330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dff340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dff350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dff360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dff370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dff380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dff390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dff3a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dff3b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dff3c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dff3d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dff3e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dff3f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dff400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dff410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dff420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dff430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dff440 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dff450 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00dff460 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00dff470 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00dff480 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00dff490 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00dff4a0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00dff4b0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00dff4c0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00dff4d0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00dff4e0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00dff4f0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00dff500 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00dff510 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00dff520 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ - 0x00dff530 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ - 0x00dff540 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ - 0x00dff550 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ - 0x00dff560 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ - 0x00dff570 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00dff580 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00dff590 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00dff5a0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00dff5b0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00dff5c0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00dff5d0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00dff5e0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00dff5f0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00dff600 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00dff610 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00dff620 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00dff630 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00dff640 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00dff650 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00dff660 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00dff670 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00dff680 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00dff690 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00dff6a0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00dff6b0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00dff6c0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00dff6d0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00dff6e0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00dff6f0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00dff700 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00dff710 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00dff720 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00dff730 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00dff740 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00dff750 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00dff760 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00dff770 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00dff780 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00dff790 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00dff7a0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00dff7b0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00dff7c0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00dff7d0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00dff7e0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00dff7f0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00dff800 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00dff810 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00dff820 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00dff830 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00dff840 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00dff850 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00dff860 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00dff870 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00dff880 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00dff890 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00dff8a0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00dff8b0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00dff8c0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00dff8d0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00dff8e0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00dff8f0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00dff900 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00dff910 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00dff920 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00dff930 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00dff940 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00dff950 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00dff960 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00dff970 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00dff980 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00dff990 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00dff9a0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00dff9b0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00dff9c0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00dff9d0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00dff9e0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00dff9f0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00dffa00 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00dffa10 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00dffa20 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00dffa30 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00dffa40 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00dffa50 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00dffa60 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00dffa70 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00dffa80 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00dffa90 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00dffaa0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00dffab0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00dffac0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00dffad0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00dffae0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00dffaf0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00dffb00 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00dffb10 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ - 0x00dffb20 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ - 0x00dffb30 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00dffb40 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00dffb50 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00dffb60 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00dffb70 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00dffb80 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ - 0x00dffb90 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ - 0x00dffba0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ - 0x00dffbb0 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ - 0x00dffbc0 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ - 0x00dffbd0 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ - 0x00dffbe0 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ - 0x00dffbf0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00dffc00 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ - 0x00dffc10 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00dffc20 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ - 0x00dffc30 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ - 0x00dffc40 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dffc50 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00dffc60 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ - 0x00dffc70 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ - 0x00dffc80 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ - 0x00dffc90 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ - 0x00dffca0 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ - 0x00dffcb0 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ - 0x00dffcc0 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ - 0x00dffcd0 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ - 0x00dffce0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00dffcf0 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ - 0x00dffd00 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ - 0x00dffd10 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ - 0x00dffd20 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00dffd30 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ - 0x00dffd40 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00dffd50 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00dffd60 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00dffd70 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ - 0x00dffd80 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ - 0x00dffd90 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ - 0x00dffda0 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ - 0x00dffdb0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00dffdc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00dffdd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00dffde0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00dffdf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00dffe00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00dffe10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00dffe20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00dffe30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00dffe40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00dffe50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00dffe60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00dffe70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00dffe80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00dffe90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00dffea0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00dffeb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00dffec0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00dffed0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00dffee0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00dffef0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00dfff00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00dfff10 63342076 5f6f6666 73657473 3b200a20 c4 v_offsets; . │ │ │ │ - 0x00dfff20 20696e20 76656334 20765f63 6f6c6f72 in vec4 v_color │ │ │ │ - 0x00dfff30 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00dfff40 46726167 436f6c6f 723b200a 2020636f FragColor; . co │ │ │ │ - 0x00dfff50 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00dfff60 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00dfff70 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ - 0x00dfff80 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ - 0x00dfff90 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ - 0x00dfffa0 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ - 0x00dfffb0 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ - 0x00dfffc0 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ - 0x00dfffd0 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ - 0x00dfffe0 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ - 0x00dffff0 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ - 0x00e00000 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ - 0x00e00010 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ - 0x00e00020 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ - 0x00e00030 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ - 0x00e00040 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ - 0x00e00050 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ - 0x00e00060 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ - 0x00e00070 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ - 0x00e00080 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ - 0x00e00090 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00e000a0 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ - 0x00e000b0 6c6f7220 3d20765f 636f6c6f 723b200a lor = v_color; . │ │ │ │ - 0x00e000c0 20202020 76656332 20726164 6975733b vec2 radius; │ │ │ │ - 0x00e000d0 200a2020 20207261 64697573 2e78203d . radius.x = │ │ │ │ - 0x00e000e0 206d6178 28302e30 2c206162 7328765f max(0.0, abs(v_ │ │ │ │ - 0x00e000f0 6f666673 6574732e 7829202d 20765f6f offsets.x) - v_o │ │ │ │ - 0x00e00100 66667365 74732e7a 293b200a 20202020 ffsets.z); . │ │ │ │ - 0x00e00110 72616469 75732e79 203d206d 61782830 radius.y = max(0 │ │ │ │ - 0x00e00120 2e302c20 61627328 765f6f66 66736574 .0, abs(v_offset │ │ │ │ - 0x00e00130 732e7929 202d2076 5f6f6666 73657473 s.y) - v_offsets │ │ │ │ - 0x00e00140 2e77293b 200a2020 2020666c 6f617420 .w); . float │ │ │ │ - 0x00e00150 6d617852 61646975 73203d20 312e303b maxRadius = 1.0; │ │ │ │ - 0x00e00160 200a2020 2020666c 6f617420 61615261 . float aaRa │ │ │ │ - 0x00e00170 64697573 203d2030 2e393b20 0a202020 dius = 0.9; . │ │ │ │ - 0x00e00180 20666c6f 61742073 74657056 616c7565 float stepValue │ │ │ │ - 0x00e00190 203d2073 6d6f6f74 68737465 70286161 = smoothstep(aa │ │ │ │ - 0x00e001a0 52616469 7573202a 20616152 61646975 Radius * aaRadiu │ │ │ │ - 0x00e001b0 732c206d 61785261 64697573 202a206d s, maxRadius * m │ │ │ │ - 0x00e001c0 61785261 64697573 2c20646f 74287261 axRadius, dot(ra │ │ │ │ - 0x00e001d0 64697573 2e78792c 20726164 6975732e dius.xy, radius. │ │ │ │ - 0x00e001e0 78792929 3b200a20 20202066 696e616c xy)); . final │ │ │ │ - 0x00e001f0 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ - 0x00e00200 6f6c6f72 2e61202a 2028312e 30202d20 olor.a * (1.0 - │ │ │ │ - 0x00e00210 73746570 56616c75 65293b20 0a202020 stepValue); . │ │ │ │ - 0x00e00220 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ - 0x00e00230 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ - 0x00e00240 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00e00250 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00e00260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00e00270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00e00280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00e00290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00e002a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00e002b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00e002c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00e002d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00e002e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00e002f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00e00300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00e00310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00e00320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00e00330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00e00340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00e00350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00e00360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00e00370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00e00380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00e00390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00e003a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00e003b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00e003c0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00e003d0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00e003e0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00e003f0 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ - 0x00e00400 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ - 0x00e00410 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ - 0x00e00420 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00e00430 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00e00440 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00e00450 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00e00460 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00e00470 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00e00480 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ - 0x00e00490 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ - 0x00e004a0 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ - 0x00e004b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00e004c0 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ - 0x00e004d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00e004e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00e004f0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00e00500 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00e00510 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00e00520 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00e00530 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00e00540 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00e00550 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00e00560 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00e00570 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00e00580 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00e00590 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00e005a0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00e005b0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00e005c0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00e005d0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00e005e0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00e005f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00e00600 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00e00610 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00e00620 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00e00630 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00e00640 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00e00650 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00e00660 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00e00670 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00e00680 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00e00690 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00e006a0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00e006b0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00e006c0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00e006d0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00e006e0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00e006f0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00e00700 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00e00710 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00e00720 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00e00730 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00e00740 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00e00750 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00e00760 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00e00770 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00e00780 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00e00790 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00e007a0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00e007b0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00e007c0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00e007d0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00e007e0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00e007f0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00e00800 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00e00810 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00e00820 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00e00830 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00e00840 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00e00850 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00e00860 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00e00870 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00e00880 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00e00890 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00e008a0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00e008b0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00e008c0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00e008d0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00e008e0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00e008f0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00e00900 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00e00910 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00e00920 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00e00930 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00e00940 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00e00950 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00e00960 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00e00970 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00e00980 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00e00990 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00e009a0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00e009b0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00e009c0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00e009d0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00e009e0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00e009f0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00e00a00 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00e00a10 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00e00a20 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00e00a30 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00e00a40 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00e00a50 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00e00a60 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ - 0x00e00a70 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ - 0x00e00a80 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ - 0x00e00a90 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00e00aa0 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ - 0x00e00ab0 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ - 0x00e00ac0 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ - 0x00e00ad0 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ - 0x00e00ae0 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ - 0x00e00af0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00e00b00 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ - 0x00e00b10 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ - 0x00e00b20 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ - 0x00e00b30 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ - 0x00e00b40 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ - 0x00e00b50 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ - 0x00e00b60 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ - 0x00e00b70 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ - 0x00e00b80 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ - 0x00e00b90 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ - 0x00e00ba0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00e00bb0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00e00bc0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00e00bd0 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ - 0x00e00be0 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ - 0x00e00bf0 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ - 0x00e00c00 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ - 0x00e00c10 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ - 0x00e00c20 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ - 0x00e00c30 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ - 0x00e00c40 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ - 0x00e00c50 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ - 0x00e00c60 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00e00c70 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00e00c80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00e00c90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00e00ca0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00e00cb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00e00cc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00e00cd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00e00ce0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00e00cf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00e00d00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00e00d10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00e00d20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00e00d30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00e00d40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00e00d50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00e00d60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00e00d70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00e00d80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00e00d90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00e00da0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00e00db0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00e00dc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00e00dd0 63342076 5f746578 436f6f72 64733b20 c4 v_texCoords; │ │ │ │ - 0x00e00de0 0a202069 6e207665 63342076 5f6d6173 . in vec4 v_mas │ │ │ │ - 0x00e00df0 6b436f6c 6f723b20 0a20206f 75742076 kColor; . out v │ │ │ │ - 0x00e00e00 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00e00e10 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00e00e20 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00e00e30 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00e00e40 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ - 0x00e00e50 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ - 0x00e00e60 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ - 0x00e00e70 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00e00e80 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ - 0x00e00e90 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00e00ea0 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ - 0x00e00eb0 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00e00ec0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00e00ed0 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ - 0x00e00ee0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ - 0x00e00ef0 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ - 0x00e00f00 6c696e65 50617373 3b200a20 20756e69 linePass; . uni │ │ │ │ - 0x00e00f10 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00e00f20 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ - 0x00e00f30 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00e00f40 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00e00f50 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ - 0x00e00f60 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ - 0x00e00f70 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ - 0x00e00f80 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ - 0x00e00f90 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ - 0x00e00fa0 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ - 0x00e00fb0 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ - 0x00e00fc0 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ - 0x00e00fd0 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ - 0x00e00fe0 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ - 0x00e00ff0 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ - 0x00e01000 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ - 0x00e01010 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ - 0x00e01020 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ - 0x00e01030 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ - 0x00e01040 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ - 0x00e01050 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ - 0x00e01060 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ - 0x00e01070 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00e01080 20202020 76656334 20636f6c 6f72203d vec4 color = │ │ │ │ - 0x00e01090 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00e010a0 5465782c 20765f74 6578436f 6f726473 Tex, v_texCoords │ │ │ │ - 0x00e010b0 2e787929 3b200a20 20202076 65633420 .xy); . vec4 │ │ │ │ - 0x00e010c0 6267436f 6c6f7220 3d207465 78747572 bgColor = textur │ │ │ │ - 0x00e010d0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00e010e0 74657843 6f6f7264 732e7a77 29202a20 texCoords.zw) * │ │ │ │ - 0x00e010f0 76656334 28765f6d 61736b43 6f6c6f72 vec4(v_maskColor │ │ │ │ - 0x00e01100 2e78797a 2c20312e 30293b20 0a202020 .xyz, 1.0); . │ │ │ │ - 0x00e01110 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ - 0x00e01120 203d206d 69782863 6f6c6f72 2c206d69 = mix(color, mi │ │ │ │ - 0x00e01130 78286267 436f6c6f 722c2063 6f6c6f72 x(bgColor, color │ │ │ │ - 0x00e01140 2c20636f 6c6f722e 61292c20 6267436f , color.a), bgCo │ │ │ │ - 0x00e01150 6c6f722e 61293b20 0a202020 2066696e lor.a); . fin │ │ │ │ - 0x00e01160 616c436f 6c6f722e 61203d20 636c616d alColor.a = clam │ │ │ │ - 0x00e01170 7028636f 6c6f722e 61202b20 6267436f p(color.a + bgCo │ │ │ │ - 0x00e01180 6c6f722e 612c2030 2e302c20 312e3029 lor.a, 0.0, 1.0) │ │ │ │ - 0x00e01190 202a2075 5f6f7061 63697479 202a2076 * u_opacity * v │ │ │ │ - 0x00e011a0 5f6d6173 6b436f6c 6f722e77 3b200a20 _maskColor.w; . │ │ │ │ - 0x00e011b0 20202069 66202866 696e616c 436f6c6f if (finalColo │ │ │ │ - 0x00e011c0 722e6120 3c20302e 30312920 0a202020 r.a < 0.01) . │ │ │ │ - 0x00e011d0 20202064 69736361 72643b20 0a202020 discard; . │ │ │ │ - 0x00e011e0 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ - 0x00e011f0 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ - 0x00e01200 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00e01210 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00e01220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00e01230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00e01240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00e01250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00e01260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00e01270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00e01280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00e01290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00e012a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00e012b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00e012c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00e012d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00e012e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00e012f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00e01300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00e01310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00e01320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00e01330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00e01340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00e01350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00e01360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00e01370 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00e01380 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00e01390 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00e013a0 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00e013b0 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00e013c0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00e013d0 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00e013e0 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00e013f0 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00e01400 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00e01410 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00e01420 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00e01430 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00e01440 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00e01450 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00e01460 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00e01470 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00e01480 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00e01490 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00e014a0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00e014b0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00e014c0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00e014d0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00e014e0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00e014f0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00e01500 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00e01510 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00e01520 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00e01530 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00e01540 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00e01550 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00e01560 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00e01570 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00e01580 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00e01590 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00e015a0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00e015b0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00e015c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00e015d0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00e015e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00e015f0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00e01600 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00e01610 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00e01620 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00e01630 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00e01640 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00e01650 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00e01660 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00e01670 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00e01680 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00e01690 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00e016a0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00e016b0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00e016c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00e016d0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00e016e0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00e016f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00e01700 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00e01710 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00e01720 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00e01730 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00e01740 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00e01750 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00e01760 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00e01770 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00e01780 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00e01790 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00e017a0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00e017b0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00e017c0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00e017d0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00e017e0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00e017f0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00e01800 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00e01810 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00e01820 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00e01830 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00e01840 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00e01850 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00e01860 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00e01870 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00e01880 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00e01890 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00e018a0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00e018b0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00e018c0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00e018d0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00e018e0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00e018f0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00e01900 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00e01910 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00e01920 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00e01930 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00e01940 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00e01950 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00e01960 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00e01970 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00e01980 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00e01990 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00e019a0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00e019b0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00e019c0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00e019d0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00e019e0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00e019f0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00e01a00 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00e01a10 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00e01a20 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00e01a30 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00e01a40 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00e01a50 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00e01a60 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00e01a70 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00e01a80 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00e01a90 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00e01aa0 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00e01ab0 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00e01ac0 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00e01ad0 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00e01ae0 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00e01af0 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00e01b00 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00e01b10 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00e01b20 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ - 0x00e01b30 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ - 0x00e01b40 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ - 0x00e01b50 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ - 0x00e01b60 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ - 0x00e01b70 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ - 0x00e01b80 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ - 0x00e01b90 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00e01ba0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00e01bb0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00e01bc0 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ - 0x00e01bd0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00e01be0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00e01bf0 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ - 0x00e01c00 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ - 0x00e01c10 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ - 0x00e01c20 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ - 0x00e01c30 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ - 0x00e01c40 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ - 0x00e01c50 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ - 0x00e01c60 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ - 0x00e01c70 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ - 0x00e01c80 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ - 0x00e01c90 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ - 0x00e01ca0 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ - 0x00e01cb0 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ - 0x00e01cc0 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ - 0x00e01cd0 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ - 0x00e01ce0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00e01cf0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00e01d00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00e01d10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00e01d20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00e01d30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00e01d40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00e01d50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00e01d60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00e01d70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00e01d80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00e01d90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00e01da0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00e01db0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00e01dc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00e01dd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00e01de0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00e01df0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00e01e00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00e01e10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00e01e20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00e01e30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00e01e40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00e01e50 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00e01e60 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00e01e70 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00e01e80 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00e01e90 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00e01ea0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00e01eb0 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00e01ec0 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00e01ed0 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00e01ee0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00e01ef0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00e01f00 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00e01f10 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00e01f20 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00e01f30 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00e01f40 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00e01f50 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00e01f60 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00e01f70 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00e01f80 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00e01f90 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00e01fa0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00e01fb0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00e01fc0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00e01fd0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00e01fe0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00e01ff0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00e02000 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00e02010 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00e02020 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00e02030 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00e02040 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00e02050 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00e02060 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00e02070 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00e02080 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00e02090 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00e020a0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00e020b0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00e020c0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00e020d0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00e020e0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00e020f0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00e02100 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00e02110 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00e02120 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00e02130 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00e02140 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00e02150 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00e02160 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00e02170 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00e02180 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00e02190 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00e021a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00e021b0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00e021c0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00e021d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00e021e0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00e021f0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00e02200 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00e02210 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00e02220 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00e02230 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00e02240 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00e02250 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00e02260 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00e02270 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00e02280 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00e02290 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00e022a0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00e022b0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00e022c0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00e022d0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00e022e0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00e022f0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00e02300 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00e02310 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00e02320 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00e02330 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00e02340 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00e02350 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00e02360 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00e02370 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00e02380 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00e02390 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00e023a0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00e023b0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00e023c0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00e023d0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00e023e0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00e023f0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00e02400 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00e02410 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00e02420 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00e02430 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00e02440 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00e02450 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00e02460 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00e02470 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00e02480 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00e02490 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00e024a0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00e024b0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00e024c0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00e024d0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00e024e0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00e024f0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00e02500 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00e02510 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00e02520 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00e02530 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00e02540 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00e02550 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00e02560 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00e02570 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00e02580 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00e02590 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00e025a0 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00e025b0 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00e025c0 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00e025d0 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00e025e0 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00e025f0 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00e02600 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ - 0x00e02610 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ - 0x00e02620 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00e02630 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ - 0x00e02640 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ - 0x00e02650 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00e02660 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ - 0x00e02670 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ - 0x00e02680 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ - 0x00e02690 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ - 0x00e026a0 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ - 0x00e026b0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00e026c0 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ - 0x00e026d0 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ - 0x00e026e0 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ - 0x00e026f0 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ - 0x00e02700 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ - 0x00e02710 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ - 0x00e02720 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ - 0x00e02730 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ - 0x00e02740 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00e02750 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ - 0x00e02760 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ - 0x00e02770 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ - 0x00e02780 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ - 0x00e02790 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ - 0x00e027a0 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ - 0x00e027b0 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ - 0x00e027c0 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ - 0x00e027d0 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ - 0x00e027e0 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ - 0x00e027f0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00ddf9c0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00ddf9d0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00ddf9e0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00ddf9f0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00ddfa00 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00ddfa10 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00ddfa20 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00ddfa30 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00ddfa40 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00ddfa50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00ddfa60 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00ddfa70 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00ddfa80 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00ddfa90 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00ddfaa0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00ddfab0 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00ddfac0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00ddfad0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00ddfae0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00ddfaf0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00ddfb00 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00ddfb10 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00ddfb20 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00ddfb30 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00ddfb40 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00ddfb50 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00ddfb60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00ddfb70 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00ddfb80 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00ddfb90 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00ddfba0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00ddfbb0 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00ddfbc0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00ddfbd0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00ddfbe0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00ddfbf0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00ddfc00 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00ddfc10 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00ddfc20 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00ddfc30 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00ddfc40 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00ddfc50 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00ddfc60 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00ddfc70 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00ddfc80 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00ddfc90 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00ddfca0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00ddfcb0 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00ddfcc0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00ddfcd0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00ddfce0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00ddfcf0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00ddfd00 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00ddfd10 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00ddfd20 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00ddfd30 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00ddfd40 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00ddfd50 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00ddfd60 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00ddfd70 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00ddfd80 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00ddfd90 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00ddfda0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00ddfdb0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00ddfdc0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00ddfdd0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00ddfde0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00ddfdf0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00ddfe00 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00ddfe10 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00ddfe20 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00ddfe30 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00ddfe40 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00ddfe50 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00ddfe60 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00ddfe70 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00ddfe80 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ + 0x00ddfe90 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ + 0x00ddfea0 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ + 0x00ddfeb0 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ + 0x00ddfec0 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00ddfed0 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ + 0x00ddfee0 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ + 0x00ddfef0 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ + 0x00ddff00 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ + 0x00ddff10 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ + 0x00ddff20 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ + 0x00ddff30 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ + 0x00ddff40 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ + 0x00ddff50 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ + 0x00ddff60 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ + 0x00ddff70 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ + 0x00ddff80 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00ddff90 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00ddffa0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00ddffb0 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00ddffc0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00ddffd0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00ddffe0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00ddfff0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00de0000 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00de0010 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de0020 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de0030 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de0040 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de0050 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de0060 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de0070 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de0080 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de0090 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de00a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de00b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de00c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de00d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de00e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de00f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de0100 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de0110 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de0120 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de0130 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de0140 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de0150 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de0160 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de0170 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00de0180 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00de0190 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ + 0x00de01a0 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00de01b0 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ + 0x00de01c0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00de01d0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00de01e0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00de01f0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00de0200 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00de0210 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00de0220 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ + 0x00de0230 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00de0240 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ + 0x00de0250 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00de0260 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ + 0x00de0270 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ + 0x00de0280 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ + 0x00de0290 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ + 0x00de02a0 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ + 0x00de02b0 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ + 0x00de02c0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00de02d0 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00de02e0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00de02f0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00de0300 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00de0310 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00de0320 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00de0330 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00de0340 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00de0350 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00de0360 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00de0370 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00de0380 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00de0390 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00de03a0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00de03b0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00de03c0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00de03d0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00de03e0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00de03f0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00de0400 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00de0410 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de0420 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00de0430 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00de0440 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00de0450 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00de0460 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00de0470 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00de0480 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00de0490 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00de04a0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00de04b0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00de04c0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00de04d0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00de04e0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00de04f0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00de0500 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00de0510 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00de0520 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00de0530 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00de0540 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00de0550 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00de0560 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00de0570 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00de0580 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00de0590 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00de05a0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00de05b0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00de05c0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00de05d0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00de05e0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00de05f0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00de0600 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00de0610 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00de0620 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00de0630 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00de0640 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00de0650 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00de0660 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00de0670 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00de0680 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00de0690 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00de06a0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00de06b0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00de06c0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00de06d0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00de06e0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00de06f0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00de0700 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00de0710 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00de0720 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00de0730 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00de0740 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00de0750 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00de0760 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00de0770 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00de0780 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00de0790 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00de07a0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00de07b0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00de07c0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00de07d0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00de07e0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00de07f0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00de0800 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00de0810 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00de0820 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00de0830 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00de0840 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00de0850 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00de0860 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00de0870 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00de0880 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00de0890 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00de08a0 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00de08b0 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00de08c0 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ + 0x00de08d0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00de08e0 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ + 0x00de08f0 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ + 0x00de0900 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00de0910 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00de0920 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00de0930 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ + 0x00de0940 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00de0950 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00de0960 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00de0970 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ + 0x00de0980 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de0990 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de09a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de09b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de09c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de09d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de09e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de09f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de0a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de0a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de0a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de0a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de0a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de0a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de0a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de0a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de0a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de0a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de0aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de0ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de0ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de0ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de0ae0 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00de0af0 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00de0b00 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00de0b10 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00de0b20 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00de0b30 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00de0b40 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00de0b50 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00de0b60 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00de0b70 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00de0b80 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00de0b90 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00de0ba0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00de0bb0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00de0bc0 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ + 0x00de0bd0 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ + 0x00de0be0 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ + 0x00de0bf0 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ + 0x00de0c00 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ + 0x00de0c10 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ + 0x00de0c20 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ + 0x00de0c30 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ + 0x00de0c40 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ + 0x00de0c50 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ + 0x00de0c60 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ + 0x00de0c70 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ + 0x00de0c80 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ + 0x00de0c90 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ + 0x00de0ca0 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ + 0x00de0cb0 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ + 0x00de0cc0 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ + 0x00de0cd0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00de0ce0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00de0cf0 765f4672 6167436f 6c6f7220 3d207665 v_FragColor = ve │ │ │ │ + 0x00de0d00 63342875 5f636f6c 6f722e72 67622c20 c4(u_color.rgb, │ │ │ │ + 0x00de0d10 755f636f 6c6f722e 61202a20 765f696e u_color.a * v_in │ │ │ │ + 0x00de0d20 74656e73 69747929 3b200a20 207d200a tensity); . } . │ │ │ │ + 0x00de0d30 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de0d40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de0d50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de0d60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de0d70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de0d80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de0d90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de0da0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de0db0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de0dc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de0dd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de0de0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de0df0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de0e00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de0e10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de0e20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de0e30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de0e40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de0e50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de0e60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de0e70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de0e80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de0e90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00de0ea0 72643b20 0a202069 6e207665 63332076 rd; . in vec3 v │ │ │ │ + 0x00de0eb0 5f726164 6975733b 200a2020 6f757420 _radius; . out │ │ │ │ + 0x00de0ec0 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00de0ed0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00de0ee0 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00de0ef0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00de0f00 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00de0f10 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00de0f20 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00de0f30 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00de0f40 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00de0f50 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00de0f60 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00de0f70 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00de0f80 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00de0f90 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00de0fa0 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00de0fb0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00de0fc0 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00de0fd0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00de0fe0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00de0ff0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00de1000 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00de1010 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00de1020 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00de1030 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00de1040 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00de1050 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00de1060 3030302e 303b200a 20204c4f 575f5020 000.0; . LOW_P │ │ │ │ + 0x00de1070 76656333 204d6f64 756c6174 65427950 vec3 ModulateByP │ │ │ │ + 0x00de1080 61747465 726e446f 7473284c 4f575f50 atternDots(LOW_P │ │ │ │ + 0x00de1090 20766563 3320636f 6c6f722c 20666c6f vec3 color, flo │ │ │ │ + 0x00de10a0 61742064 61726b65 6e2c2066 6c6f6174 at darken, float │ │ │ │ + 0x00de10b0 20636f76 65726167 6529200a 20207b20 coverage) . { │ │ │ │ + 0x00de10c0 0a202020 20636f6e 73742066 6c6f6174 . const float │ │ │ │ + 0x00de10d0 206b4c69 67687465 6e203d20 302e3037 kLighten = 0.07 │ │ │ │ + 0x00de10e0 353b200a 20202020 69662028 646f7428 5; . if (dot( │ │ │ │ + 0x00de10f0 636f6c6f 722c2076 65633328 302e3231 color, vec3(0.21 │ │ │ │ + 0x00de1100 32362c20 302e3731 35322c20 302e3037 26, 0.7152, 0.07 │ │ │ │ + 0x00de1110 32322929 203c2030 2e352920 0a202020 22)) < 0.5) . │ │ │ │ + 0x00de1120 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ + 0x00de1130 2b20636f 76657261 6765202a 206b4c69 + coverage * kLi │ │ │ │ + 0x00de1140 67687465 6e3b200a 20202020 72657475 ghten; . retu │ │ │ │ + 0x00de1150 726e2063 6f6c6f72 202a206d 69782831 rn color * mix(1 │ │ │ │ + 0x00de1160 2e302c20 6461726b 656e2c20 636f7665 .0, darken, cove │ │ │ │ + 0x00de1170 72616765 293b200a 20207d20 0a202076 rage); . } . v │ │ │ │ + 0x00de1180 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00de1190 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ + 0x00de11a0 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ + 0x00de11b0 72546578 2c20765f 636f6c6f 72546578 rTex, v_colorTex │ │ │ │ + 0x00de11c0 436f6f72 64293b20 0a202020 20666c6f Coord); . flo │ │ │ │ + 0x00de11d0 61742073 6d616c6c 52616469 7573203d at smallRadius = │ │ │ │ + 0x00de11e0 20765f72 61646975 732e7a20 2a206b41 v_radius.z * kA │ │ │ │ + 0x00de11f0 6e746961 6c696173 696e6754 68726573 ntialiasingThres │ │ │ │ + 0x00de1200 686f6c64 3b200a20 20202066 6c6f6174 hold; . float │ │ │ │ + 0x00de1210 20737465 7056616c 7565203d 20736d6f stepValue = smo │ │ │ │ + 0x00de1220 6f746873 74657028 736d616c 6c526164 othstep(smallRad │ │ │ │ + 0x00de1230 69757320 2a20736d 616c6c52 61646975 ius * smallRadiu │ │ │ │ + 0x00de1240 732c2076 5f726164 6975732e 7a202a20 s, v_radius.z * │ │ │ │ + 0x00de1250 765f7261 64697573 2e7a2c20 0a202020 v_radius.z, . │ │ │ │ + 0x00de1260 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00de1270 20202020 20202020 20202020 2020765f v_ │ │ │ │ + 0x00de1280 72616469 75732e78 202a2076 5f726164 radius.x * v_rad │ │ │ │ + 0x00de1290 6975732e 78202b20 765f7261 64697573 ius.x + v_radius │ │ │ │ + 0x00de12a0 2e79202a 20765f72 61646975 732e7929 .y * v_radius.y) │ │ │ │ + 0x00de12b0 3b200a20 20202063 6f6c6f72 2e61203d ; . color.a = │ │ │ │ + 0x00de12c0 20755f6f 70616369 7479202a 2028312e u_opacity * (1. │ │ │ │ + 0x00de12d0 30202d20 73746570 56616c75 65293b20 0 - stepValue); │ │ │ │ + 0x00de12e0 0a202020 20696620 28636f6c 6f722e61 . if (color.a │ │ │ │ + 0x00de12f0 203c2030 2e303129 200a2020 20202020 < 0.01) . │ │ │ │ + 0x00de1300 64697363 6172643b 200a2020 2020765f discard; . v_ │ │ │ │ + 0x00de1310 46726167 436f6c6f 72203d20 636f6c6f FragColor = colo │ │ │ │ + 0x00de1320 723b200a 20207d20 0a000000 00000000 r; . } ........ │ │ │ │ + 0x00de1330 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de1340 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de1350 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de1360 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de1370 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de1380 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de1390 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de13a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de13b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de13c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de13d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de13e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de13f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de1400 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de1410 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de1420 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de1430 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de1440 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de1450 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de1460 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de1470 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de1480 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de1490 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00de14a0 7264733b 200a2020 696e2066 6c6f6174 rds; . in float │ │ │ │ + 0x00de14b0 20765f69 6e74656e 73697479 3b200a20 v_intensity; . │ │ │ │ + 0x00de14c0 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00de14d0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00de14e0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00de14f0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00de1500 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00de1510 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00de1520 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00de1530 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00de1540 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00de1550 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00de1560 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00de1570 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00de1580 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00de1590 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00de15a0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00de15b0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00de15c0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00de15d0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00de15e0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00de15f0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00de1600 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00de1610 72203d20 31303030 2e303b20 0a20204c r = 1000.0; . L │ │ │ │ + 0x00de1620 4f575f50 20766563 33204d6f 64756c61 OW_P vec3 Modula │ │ │ │ + 0x00de1630 74654279 50617474 65726e44 6f747328 teByPatternDots( │ │ │ │ + 0x00de1640 4c4f575f 50207665 63332063 6f6c6f72 LOW_P vec3 color │ │ │ │ + 0x00de1650 2c20666c 6f617420 6461726b 656e2c20 , float darken, │ │ │ │ + 0x00de1660 666c6f61 7420636f 76657261 67652920 float coverage) │ │ │ │ + 0x00de1670 0a20207b 200a2020 2020636f 6e737420 . { . const │ │ │ │ + 0x00de1680 666c6f61 74206b4c 69676874 656e203d float kLighten = │ │ │ │ + 0x00de1690 20302e30 37353b20 0a202020 20696620 0.075; . if │ │ │ │ + 0x00de16a0 28646f74 28636f6c 6f722c20 76656333 (dot(color, vec3 │ │ │ │ + 0x00de16b0 28302e32 3132362c 20302e37 3135322c (0.2126, 0.7152, │ │ │ │ + 0x00de16c0 20302e30 37323229 29203c20 302e3529 0.0722)) < 0.5) │ │ │ │ + 0x00de16d0 200a2020 20202020 72657475 726e2063 . return c │ │ │ │ + 0x00de16e0 6f6c6f72 202b2063 6f766572 61676520 olor + coverage │ │ │ │ + 0x00de16f0 2a206b4c 69676874 656e3b20 0a202020 * kLighten; . │ │ │ │ + 0x00de1700 20726574 75726e20 636f6c6f 72202a20 return color * │ │ │ │ + 0x00de1710 6d697828 312e302c 20646172 6b656e2c mix(1.0, darken, │ │ │ │ + 0x00de1720 20636f76 65726167 65293b20 0a20207d coverage); . } │ │ │ │ + 0x00de1730 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00de1740 0a20207b 200a2020 20207665 63342066 . { . vec4 f │ │ │ │ + 0x00de1750 696e616c 436f6c6f 72203d20 76656334 inalColor = vec4 │ │ │ │ + 0x00de1760 28746578 74757265 28755f63 6f6c6f72 (texture(u_color │ │ │ │ + 0x00de1770 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00de1780 6f6f7264 73292e72 67622c20 755f6f70 oords).rgb, u_op │ │ │ │ + 0x00de1790 61636974 79293b20 0a202020 20765f46 acity); . v_F │ │ │ │ + 0x00de17a0 72616743 6f6c6f72 203d2076 65633428 ragColor = vec4( │ │ │ │ + 0x00de17b0 28765f69 6e74656e 73697479 202a2030 (v_intensity * 0 │ │ │ │ + 0x00de17c0 2e32202b 20302e38 29202a20 66696e61 .2 + 0.8) * fina │ │ │ │ + 0x00de17d0 6c436f6c 6f722e72 67622c20 66696e61 lColor.rgb, fina │ │ │ │ + 0x00de17e0 6c436f6c 6f722e61 293b200a 20207d20 lColor.a); . } │ │ │ │ + 0x00de17f0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de1800 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de1810 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de1820 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de1830 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de1840 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de1850 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de1860 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de1870 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de1880 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de1890 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de18a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de18b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de18c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de18d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de18e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de18f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de1900 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de1910 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de1920 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de1930 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de1940 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de1950 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00de1960 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00de1970 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00de1980 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00de1990 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00de19a0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00de19b0 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ + 0x00de19c0 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ + 0x00de19d0 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ + 0x00de19e0 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ + 0x00de19f0 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ + 0x00de1a00 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ + 0x00de1a10 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ + 0x00de1a20 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00de1a30 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00de1a40 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00de1a50 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00de1a60 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00de1a70 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ + 0x00de1a80 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00de1a90 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ + 0x00de1aa0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00de1ab0 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ + 0x00de1ac0 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ + 0x00de1ad0 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ + 0x00de1ae0 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ + 0x00de1af0 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ + 0x00de1b00 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ + 0x00de1b10 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00de1b20 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00de1b30 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00de1b40 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00de1b50 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00de1b60 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00de1b70 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00de1b80 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00de1b90 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00de1ba0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00de1bb0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00de1bc0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00de1bd0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de1be0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00de1bf0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00de1c00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00de1c10 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00de1c20 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00de1c30 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00de1c40 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00de1c50 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00de1c60 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00de1c70 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00de1c80 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00de1c90 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00de1ca0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de1cb0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00de1cc0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00de1cd0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00de1ce0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00de1cf0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00de1d00 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00de1d10 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00de1d20 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00de1d30 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00de1d40 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00de1d50 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00de1d60 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00de1d70 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00de1d80 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00de1d90 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00de1da0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00de1db0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00de1dc0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00de1dd0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00de1de0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00de1df0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00de1e00 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00de1e10 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00de1e20 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00de1e30 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00de1e40 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00de1e50 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00de1e60 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00de1e70 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00de1e80 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00de1e90 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00de1ea0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00de1eb0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00de1ec0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00de1ed0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00de1ee0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00de1ef0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00de1f00 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00de1f10 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00de1f20 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00de1f30 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00de1f40 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00de1f50 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00de1f60 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00de1f70 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00de1f80 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00de1f90 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00de1fa0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00de1fb0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00de1fc0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00de1fd0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00de1fe0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00de1ff0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00de2000 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00de2010 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00de2020 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00de2030 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00de2040 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00de2050 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00de2060 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00de2070 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00de2080 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00de2090 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00de20a0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00de20b0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00de20c0 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00de20d0 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ + 0x00de20e0 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ + 0x00de20f0 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ + 0x00de2100 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ + 0x00de2110 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00de2120 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ + 0x00de2130 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ + 0x00de2140 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ + 0x00de2150 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ + 0x00de2160 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ + 0x00de2170 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ + 0x00de2180 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ + 0x00de2190 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ + 0x00de21a0 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ + 0x00de21b0 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ + 0x00de21c0 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ + 0x00de21d0 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ + 0x00de21e0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00de21f0 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ + 0x00de2200 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ + 0x00de2210 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ + 0x00de2220 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ + 0x00de2230 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ + 0x00de2240 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ + 0x00de2250 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ + 0x00de2260 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ + 0x00de2270 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ + 0x00de2280 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ + 0x00de2290 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00de22a0 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ + 0x00de22b0 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ + 0x00de22c0 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ + 0x00de22d0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00de22e0 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ + 0x00de22f0 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ + 0x00de2300 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ + 0x00de2310 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ + 0x00de2320 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ + 0x00de2330 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ + 0x00de2340 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ + 0x00de2350 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00de2360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de2370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de2380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de2390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de23a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de23b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de23c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de23d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de23e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de23f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de2400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de2410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de2420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de2430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de2440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de2450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de2460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de2470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de2480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de2490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de24a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de24b0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00de24c0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00de24d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00de24e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00de24f0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00de2500 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00de2510 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00de2520 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00de2530 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00de2540 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00de2550 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00de2560 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00de2570 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ + 0x00de2580 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00de2590 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00de25a0 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ + 0x00de25b0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00de25c0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00de25d0 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ + 0x00de25e0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00de25f0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00de2600 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00de2610 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00de2620 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00de2630 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00de2640 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00de2650 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00de2660 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00de2670 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00de2680 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00de2690 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00de26a0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00de26b0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00de26c0 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00de26d0 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00de26e0 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00de26f0 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00de2700 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00de2710 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00de2720 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00de2730 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00de2740 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00de2750 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00de2760 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00de2770 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00de2780 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00de2790 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00de27a0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00de27b0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00de27c0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00de27d0 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00de27e0 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00de27f0 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00de2800 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00de2810 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00de2820 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00de2830 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00de2840 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00de2850 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00de2860 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00de2870 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00de2880 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00de2890 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00de28a0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00de28b0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00de28c0 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00de28d0 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00de28e0 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00de28f0 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00de2900 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00de2910 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00de2920 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00de2930 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00de2940 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de2950 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00de2960 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00de2970 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00de2980 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00de2990 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00de29a0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00de29b0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00de29c0 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00de29d0 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00de29e0 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00de29f0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00de2a00 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00de2a10 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00de2a20 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00de2a30 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00de2a40 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00de2a50 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00de2a60 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00de2a70 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00de2a80 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00de2a90 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00de2aa0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00de2ab0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00de2ac0 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00de2ad0 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00de2ae0 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00de2af0 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00de2b00 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00de2b10 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00de2b20 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00de2b30 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00de2b40 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00de2b50 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00de2b60 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00de2b70 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00de2b80 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00de2b90 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00de2ba0 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ + 0x00de2bb0 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ + 0x00de2bc0 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ + 0x00de2bd0 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ + 0x00de2be0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00de2bf0 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00de2c00 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00de2c10 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00de2c20 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00de2c30 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ + 0x00de2c40 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00de2c50 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ + 0x00de2c60 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ + 0x00de2c70 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00de2c80 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00de2c90 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de2ca0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de2cb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de2cc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de2cd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de2ce0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de2cf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de2d00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de2d10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de2d20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de2d30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de2d40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de2d50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de2d60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de2d70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de2d80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de2d90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de2da0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de2db0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de2dc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de2dd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de2de0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de2df0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00de2e00 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00de2e10 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00de2e20 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00de2e30 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00de2e40 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00de2e50 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00de2e60 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00de2e70 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00de2e80 69666f72 6d207665 63322075 5f636f6e iform vec2 u_con │ │ │ │ + 0x00de2e90 74726173 7447616d 6d613b20 0a202075 trastGamma; . u │ │ │ │ + 0x00de2ea0 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00de2eb0 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00de2ec0 726d2066 6c6f6174 20755f7a 5363616c rm float u_zScal │ │ │ │ + 0x00de2ed0 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00de2ee0 6f617420 755f696e 74657270 6f6c6174 oat u_interpolat │ │ │ │ + 0x00de2ef0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00de2f00 666c6f61 7420755f 69734f75 746c696e float u_isOutlin │ │ │ │ + 0x00de2f10 65506173 733b200a 2020756e 69666f72 ePass; . unifor │ │ │ │ + 0x00de2f20 6d207361 6d706c65 72324420 755f636f m sampler2D u_co │ │ │ │ + 0x00de2f30 6c6f7254 65783b20 0a202063 6f6e7374 lorTex; . const │ │ │ │ + 0x00de2f40 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00de2f50 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00de2f60 303b200a 20204c4f 575f5020 76656333 0; . LOW_P vec3 │ │ │ │ + 0x00de2f70 204d6f64 756c6174 65427950 61747465 ModulateByPatte │ │ │ │ + 0x00de2f80 726e446f 7473284c 4f575f50 20766563 rnDots(LOW_P vec │ │ │ │ + 0x00de2f90 3320636f 6c6f722c 20666c6f 61742064 3 color, float d │ │ │ │ + 0x00de2fa0 61726b65 6e2c2066 6c6f6174 20636f76 arken, float cov │ │ │ │ + 0x00de2fb0 65726167 6529200a 20207b20 0a202020 erage) . { . │ │ │ │ + 0x00de2fc0 20636f6e 73742066 6c6f6174 206b4c69 const float kLi │ │ │ │ + 0x00de2fd0 67687465 6e203d20 302e3037 353b200a ghten = 0.075; . │ │ │ │ + 0x00de2fe0 20202020 69662028 646f7428 636f6c6f if (dot(colo │ │ │ │ + 0x00de2ff0 722c2076 65633328 302e3231 32362c20 r, vec3(0.2126, │ │ │ │ + 0x00de3000 302e3731 35322c20 302e3037 32322929 0.7152, 0.0722)) │ │ │ │ + 0x00de3010 203c2030 2e352920 0a202020 20202072 < 0.5) . r │ │ │ │ + 0x00de3020 65747572 6e20636f 6c6f7220 2b20636f eturn color + co │ │ │ │ + 0x00de3030 76657261 6765202a 206b4c69 67687465 verage * kLighte │ │ │ │ + 0x00de3040 6e3b200a 20202020 72657475 726e2063 n; . return c │ │ │ │ + 0x00de3050 6f6c6f72 202a206d 69782831 2e302c20 olor * mix(1.0, │ │ │ │ + 0x00de3060 6461726b 656e2c20 636f7665 72616765 darken, coverage │ │ │ │ + 0x00de3070 293b200a 20207d20 0a202076 6f696420 ); . } . void │ │ │ │ + 0x00de3080 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00de3090 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ + 0x00de30a0 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ + 0x00de30b0 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ + 0x00de30c0 78436f6f 72647329 3b200a20 20202066 xCoords); . f │ │ │ │ + 0x00de30d0 696e616c 436f6c6f 722e6120 2a3d2075 inalColor.a *= u │ │ │ │ + 0x00de30e0 5f6f7061 63697479 3b200a20 20202076 _opacity; . v │ │ │ │ + 0x00de30f0 5f467261 67436f6c 6f72203d 2066696e _FragColor = fin │ │ │ │ + 0x00de3100 616c436f 6c6f723b 200a2020 7d200a00 alColor; . } .. │ │ │ │ + 0x00de3110 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de3120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de3130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de3140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de3150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de3160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de3170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de3180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de3190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de31a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de31b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de31c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de31d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de31e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de31f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de3200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de3210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de3220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de3230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de3240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de3250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de3260 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de3270 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00de3280 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00de3290 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00de32a0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00de32b0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00de32c0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00de32d0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00de32e0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00de32f0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00de3300 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00de3310 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00de3320 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00de3330 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de3340 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00de3350 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00de3360 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00de3370 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00de3380 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00de3390 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00de33a0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00de33b0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00de33c0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00de33d0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00de33e0 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00de33f0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00de3400 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00de3410 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00de3420 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00de3430 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00de3440 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00de3450 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00de3460 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00de3470 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00de3480 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00de3490 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00de34a0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00de34b0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00de34c0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00de34d0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00de34e0 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00de34f0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00de3500 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00de3510 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00de3520 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00de3530 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00de3540 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00de3550 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00de3560 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00de3570 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00de3580 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00de3590 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00de35a0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00de35b0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00de35c0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00de35d0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00de35e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00de35f0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00de3600 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00de3610 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00de3620 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00de3630 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00de3640 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00de3650 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00de3660 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00de3670 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00de3680 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00de3690 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00de36a0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00de36b0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00de36c0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00de36d0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00de36e0 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00de36f0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00de3700 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00de3710 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00de3720 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00de3730 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00de3740 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00de3750 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00de3760 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00de3770 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00de3780 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00de3790 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00de37a0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00de37b0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00de37c0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00de37d0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00de37e0 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00de37f0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00de3800 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00de3810 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00de3820 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00de3830 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00de3840 20302c20 31293b20 0a202023 69666465 0, 1); . #ifde │ │ │ │ + 0x00de3850 66205655 4c4b414e 200a2020 2020676c f VULKAN . gl │ │ │ │ + 0x00de3860 5f506f73 6974696f 6e2e7920 3d202d67 _Position.y = -g │ │ │ │ + 0x00de3870 6c5f506f 73697469 6f6e2e79 3b200a20 l_Position.y; . │ │ │ │ + 0x00de3880 20202067 6c5f506f 73697469 6f6e2e7a gl_Position.z │ │ │ │ + 0x00de3890 203d2028 676c5f50 6f736974 696f6e2e = (gl_Position. │ │ │ │ + 0x00de38a0 7a20202b 20676c5f 506f7369 74696f6e z + gl_Position │ │ │ │ + 0x00de38b0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00de38c0 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00de38d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de38e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de38f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de3900 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de3910 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de3920 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de3930 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de3940 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de3950 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de3960 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de3970 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de3980 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de3990 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de39a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de39b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de39c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de39d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de39e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de39f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de3a00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de3a10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de3a20 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00de3a30 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00de3a40 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00de3a50 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00de3a60 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00de3a70 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00de3a80 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00de3a90 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00de3aa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de3ab0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00de3ac0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00de3ad0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00de3ae0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00de3af0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00de3b00 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00de3b10 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00de3b20 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00de3b30 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00de3b40 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00de3b50 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00de3b60 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00de3b70 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00de3b80 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00de3b90 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00de3ba0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00de3bb0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00de3bc0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00de3bd0 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00de3be0 6c6f6174 206b526f 77506572 696f6450 loat kRowPeriodP │ │ │ │ + 0x00de3bf0 78203d20 382e303b 20202020 2f2f2076 x = 8.0; // v │ │ │ │ + 0x00de3c00 65727469 63616c20 64697374 616e6365 ertical distance │ │ │ │ + 0x00de3c10 20626574 7765656e 20646173 6820726f between dash ro │ │ │ │ + 0x00de3c20 7773200a 2020636f 6e737420 666c6f61 ws . const floa │ │ │ │ + 0x00de3c30 74206b52 6f774365 6e746572 5078203d t kRowCenterPx = │ │ │ │ + 0x00de3c40 20332e35 3b202020 202f2f20 66697273 3.5; // firs │ │ │ │ + 0x00de3c50 7420726f 77206365 6e746572 20286d61 t row center (ma │ │ │ │ + 0x00de3c60 74636865 73207468 65206c65 67616379 tches the legacy │ │ │ │ + 0x00de3c70 2074696c 6529200a 2020636f 6e737420 tile) . const │ │ │ │ + 0x00de3c80 666c6f61 74206b48 616c6654 6869636b float kHalfThick │ │ │ │ + 0x00de3c90 5078203d 20302e35 3b202020 202f2f20 Px = 0.5; // │ │ │ │ + 0x00de3ca0 68616c66 20646173 68207468 69636b6e half dash thickn │ │ │ │ + 0x00de3cb0 65737320 2d3e207e 31707820 0a202063 ess -> ~1px . c │ │ │ │ + 0x00de3cc0 6f6e7374 20666c6f 6174206b 44617368 onst float kDash │ │ │ │ + 0x00de3cd0 50657269 6f645078 203d2031 362e303b PeriodPx = 16.0; │ │ │ │ + 0x00de3ce0 20202f2f 20646173 68202b20 67617020 // dash + gap │ │ │ │ + 0x00de3cf0 6c656e67 7468200a 2020636f 6e737420 length . const │ │ │ │ + 0x00de3d00 666c6f61 74206b44 61736848 616c6650 float kDashHalfP │ │ │ │ + 0x00de3d10 78203d20 342e303b 20202020 202f2f20 x = 4.0; // │ │ │ │ + 0x00de3d20 68616c66 20646173 68206c65 6e677468 half dash length │ │ │ │ + 0x00de3d30 202d3e20 38707820 64617368 200a2020 -> 8px dash . │ │ │ │ + 0x00de3d40 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00de3d50 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00de3d60 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ + 0x00de3d70 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ + 0x00de3d80 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ + 0x00de3d90 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ + 0x00de3da0 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ + 0x00de3db0 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ + 0x00de3dc0 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ + 0x00de3dd0 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ + 0x00de3de0 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ + 0x00de3df0 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ + 0x00de3e00 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ + 0x00de3e10 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ + 0x00de3e20 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00de3e30 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ + 0x00de3e40 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ + 0x00de3e50 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ + 0x00de3e60 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ + 0x00de3e70 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ + 0x00de3e80 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00de3e90 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00de3ea0 455f5654 46200a20 2020204c 4f575f50 E_VTF . LOW_P │ │ │ │ + 0x00de3eb0 20766563 3420636f 6c6f7220 3d20765f vec4 color = v_ │ │ │ │ + 0x00de3ec0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00de3ed0 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ + 0x00de3ee0 636f6c6f 72203d20 74657874 75726528 color = texture( │ │ │ │ + 0x00de3ef0 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ + 0x00de3f00 6c6f7254 6578436f 6f726473 293b200a lorTexCoords); . │ │ │ │ + 0x00de3f10 20202365 6e646966 200a2020 20207665 #endif . ve │ │ │ │ + 0x00de3f20 63322070 78203d20 765f6d61 736b5465 c2 px = v_maskTe │ │ │ │ + 0x00de3f30 78436f6f 72647320 2a203136 2e303b20 xCoords * 16.0; │ │ │ │ + 0x00de3f40 0a202020 20666c6f 61742079 6d203d20 . float ym = │ │ │ │ + 0x00de3f50 6d6f6428 70782e79 202d206b 526f7743 mod(px.y - kRowC │ │ │ │ + 0x00de3f60 656e7465 7250782c 206b526f 77506572 enterPx, kRowPer │ │ │ │ + 0x00de3f70 696f6450 78293b20 0a202020 20666c6f iodPx); . flo │ │ │ │ + 0x00de3f80 61742079 44697374 203d206d 696e2879 at yDist = min(y │ │ │ │ + 0x00de3f90 6d2c206b 526f7750 6572696f 64507820 m, kRowPeriodPx │ │ │ │ + 0x00de3fa0 2d20796d 293b200a 20202020 666c6f61 - ym); . floa │ │ │ │ + 0x00de3fb0 74206161 59203d20 66776964 74682870 t aaY = fwidth(p │ │ │ │ + 0x00de3fc0 782e7929 3b200a20 20202066 6c6f6174 x.y); . float │ │ │ │ + 0x00de3fd0 206f6e52 6f77203d 20312e30 202d2073 onRow = 1.0 - s │ │ │ │ + 0x00de3fe0 6d6f6f74 68737465 70286b48 616c6654 moothstep(kHalfT │ │ │ │ + 0x00de3ff0 6869636b 5078202d 20616159 2c206b48 hickPx - aaY, kH │ │ │ │ + 0x00de4000 616c6654 6869636b 5078202b 20616159 alfThickPx + aaY │ │ │ │ + 0x00de4010 2c207944 69737429 3b200a20 20202066 , yDist); . f │ │ │ │ + 0x00de4020 6c6f6174 20726f77 49647820 3d20666c loat rowIdx = fl │ │ │ │ + 0x00de4030 6f6f7228 2870782e 79202d20 6b526f77 oor((px.y - kRow │ │ │ │ + 0x00de4040 43656e74 65725078 29202f20 6b526f77 CenterPx) / kRow │ │ │ │ + 0x00de4050 50657269 6f645078 202b2030 2e35293b PeriodPx + 0.5); │ │ │ │ + 0x00de4060 200a2020 2020666c 6f617420 78506861 . float xPha │ │ │ │ + 0x00de4070 7365203d 2070782e 78202b20 6d6f6428 se = px.x + mod( │ │ │ │ + 0x00de4080 726f7749 64782c20 322e3029 202a2028 rowIdx, 2.0) * ( │ │ │ │ + 0x00de4090 6b446173 68506572 696f6450 78202a20 kDashPeriodPx * │ │ │ │ + 0x00de40a0 302e3529 3b200a20 20202066 6c6f6174 0.5); . float │ │ │ │ + 0x00de40b0 20784469 7374203d 20616273 286d6f64 xDist = abs(mod │ │ │ │ + 0x00de40c0 28785068 6173652c 206b4461 73685065 (xPhase, kDashPe │ │ │ │ + 0x00de40d0 72696f64 50782920 2d206b44 61736848 riodPx) - kDashH │ │ │ │ + 0x00de40e0 616c6650 78293b20 0a202020 20666c6f alfPx); . flo │ │ │ │ + 0x00de40f0 61742061 6158203d 20667769 64746828 at aaX = fwidth( │ │ │ │ + 0x00de4100 70782e78 293b200a 20202020 666c6f61 px.x); . floa │ │ │ │ + 0x00de4110 74206f6e 44617368 203d2031 2e30202d t onDash = 1.0 - │ │ │ │ + 0x00de4120 20736d6f 6f746873 74657028 6b446173 smoothstep(kDas │ │ │ │ + 0x00de4130 6848616c 66507820 2d206161 582c206b hHalfPx - aaX, k │ │ │ │ + 0x00de4140 44617368 48616c66 5078202b 20616158 DashHalfPx + aaX │ │ │ │ + 0x00de4150 2c207844 69737429 3b200a20 20202063 , xDist); . c │ │ │ │ + 0x00de4160 6f6c6f72 2e61202a 3d206f6e 526f7720 olor.a *= onRow │ │ │ │ + 0x00de4170 2a206f6e 44617368 202a2075 5f6f7061 * onDash * u_opa │ │ │ │ + 0x00de4180 63697479 3b200a20 20202076 5f467261 city; . v_Fra │ │ │ │ + 0x00de4190 67436f6c 6f72203d 20636f6c 6f723b20 gColor = color; │ │ │ │ + 0x00de41a0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00de41b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de41c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de41d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de41e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de41f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de4200 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de4210 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de4220 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de4230 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de4240 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de4250 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de4260 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de4270 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de4280 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de4290 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de42a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de42b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de42c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de42d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de42e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de42f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de4300 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de4310 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00de4320 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00de4330 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00de4340 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00de4350 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00de4360 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00de4370 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00de4380 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00de4390 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00de43a0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00de43b0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00de43c0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00de43d0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00de43e0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00de43f0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00de4400 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00de4410 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00de4420 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00de4430 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00de4440 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00de4450 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00de4460 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00de4470 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00de4480 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00de4490 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00de44a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00de44b0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00de44c0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00de44d0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00de44e0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00de44f0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00de4500 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00de4510 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00de4520 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00de4530 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00de4540 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00de4550 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00de4560 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00de4570 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00de4580 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00de4590 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00de45a0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00de45b0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00de45c0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00de45d0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00de45e0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00de45f0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00de4600 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00de4610 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00de4620 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00de4630 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00de4640 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00de4650 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00de4660 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00de4670 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00de4680 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00de4690 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00de46a0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00de46b0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00de46c0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00de46d0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00de46e0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00de46f0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00de4700 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00de4710 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00de4720 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00de4730 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00de4740 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00de4750 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00de4760 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00de4770 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00de4780 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00de4790 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00de47a0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00de47b0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00de47c0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00de47d0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00de47e0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00de47f0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00de4800 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00de4810 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00de4820 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00de4830 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00de4840 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00de4850 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00de4860 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00de4870 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00de4880 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00de4890 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00de48a0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00de48b0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00de48c0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00de48d0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00de48e0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00de48f0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00de4900 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00de4910 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00de4920 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00de4930 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00de4940 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00de4950 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00de4960 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00de4970 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00de4980 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00de4990 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00de49a0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00de49b0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00de49c0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00de49d0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00de49e0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00de49f0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00de4a00 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00de4a10 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00de4a20 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00de4a30 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00de4a40 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00de4a50 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00de4a60 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00de4a70 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00de4a80 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00de4a90 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00de4aa0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00de4ab0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00de4ac0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00de4ad0 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00de4ae0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00de4af0 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ + 0x00de4b00 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00de4b10 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ + 0x00de4b20 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00de4b30 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00de4b40 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ + 0x00de4b50 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ + 0x00de4b60 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ + 0x00de4b70 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00de4b80 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ + 0x00de4b90 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ + 0x00de4ba0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00de4bb0 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ + 0x00de4bc0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00de4bd0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00de4be0 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ + 0x00de4bf0 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ + 0x00de4c00 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ + 0x00de4c10 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ + 0x00de4c20 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ + 0x00de4c30 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ + 0x00de4c40 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00de4c50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de4c60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de4c70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de4c80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de4c90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de4ca0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de4cb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de4cc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de4cd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de4ce0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de4cf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de4d00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de4d10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de4d20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de4d30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de4d40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de4d50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de4d60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de4d70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de4d80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de4d90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de4da0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00de4db0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00de4dc0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00de4dd0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00de4de0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00de4df0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00de4e00 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00de4e10 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00de4e20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de4e30 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00de4e40 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00de4e50 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00de4e60 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00de4e70 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00de4e80 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00de4e90 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00de4ea0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00de4eb0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00de4ec0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00de4ed0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00de4ee0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00de4ef0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00de4f00 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00de4f10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00de4f20 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00de4f30 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00de4f40 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00de4f50 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00de4f60 6c6f6174 206b4365 6c6c5078 203d2038 loat kCellPx = 8 │ │ │ │ + 0x00de4f70 2e303b20 20202020 2f2f2064 6f74206c .0; // dot l │ │ │ │ + 0x00de4f80 61747469 63652063 656c6c20 28646976 attice cell (div │ │ │ │ + 0x00de4f90 69646573 20746865 20313670 78207469 ides the 16px ti │ │ │ │ + 0x00de4fa0 6c652c20 736f2063 656c6c73 2074696c le, so cells til │ │ │ │ + 0x00de4fb0 65207365 616d6c65 73736c79 29200a20 e seamlessly) . │ │ │ │ + 0x00de4fc0 20636f6e 73742066 6c6f6174 206b5261 const float kRa │ │ │ │ + 0x00de4fd0 64697573 5078203d 20312e32 3b202020 diusPx = 1.2; │ │ │ │ + 0x00de4fe0 2f2f2064 6f742072 61646975 73200a20 // dot radius . │ │ │ │ + 0x00de4ff0 20636f6e 73742066 6c6f6174 206b4a69 const float kJi │ │ │ │ + 0x00de5000 74746572 203d2030 2e35353b 20202020 tter = 0.55; │ │ │ │ + 0x00de5010 2f2f206b 65657020 6b4a6974 7465722a // keep kJitter* │ │ │ │ + 0x00de5020 302e352a 6b43656c 6c507820 2b206b52 0.5*kCellPx + kR │ │ │ │ + 0x00de5030 61646975 73507820 3c206b43 656c6c50 adiusPx < kCellP │ │ │ │ + 0x00de5040 782a302e 35202864 6f747320 73746179 x*0.5 (dots stay │ │ │ │ + 0x00de5050 20696e20 63656c6c 29200a20 20636f6e in cell) . con │ │ │ │ + 0x00de5060 73742066 6c6f6174 206b4461 726b656e st float kDarken │ │ │ │ + 0x00de5070 203d2030 2e38303b 20202020 2f2f2073 = 0.80; // s │ │ │ │ + 0x00de5080 75726661 6365206d 756c7469 706c6965 urface multiplie │ │ │ │ + 0x00de5090 7220756e 64657220 6120646f 74206f6e r under a dot on │ │ │ │ + 0x00de50a0 2061206c 69676874 2066696c 6c202867 a light fill (g │ │ │ │ + 0x00de50b0 656e746c 65202d20 74657874 75726520 entle - texture │ │ │ │ + 0x00de50c0 73686f75 6c642077 68697370 65722920 should whisper) │ │ │ │ + 0x00de50d0 0a202066 6c6f6174 20486173 68287665 . float Hash(ve │ │ │ │ + 0x00de50e0 63322070 29200a20 207b200a 20202020 c2 p) . { . │ │ │ │ + 0x00de50f0 70203d20 66726163 74287020 2a207665 p = fract(p * ve │ │ │ │ + 0x00de5100 63322831 32372e31 2c203331 312e3729 c2(127.1, 311.7) │ │ │ │ + 0x00de5110 293b200a 20202020 70202b3d 20646f74 ); . p += dot │ │ │ │ + 0x00de5120 28702c20 70202b20 33342e32 33293b20 (p, p + 34.23); │ │ │ │ + 0x00de5130 0a202020 20726574 75726e20 66726163 . return frac │ │ │ │ + 0x00de5140 7428702e 78202a20 702e7929 3b200a20 t(p.x * p.y); . │ │ │ │ + 0x00de5150 207d200a 2020636f 6e737420 666c6f61 } . const floa │ │ │ │ + 0x00de5160 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00de5170 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00de5180 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ + 0x00de5190 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ + 0x00de51a0 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ + 0x00de51b0 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ + 0x00de51c0 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ + 0x00de51d0 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ + 0x00de51e0 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ + 0x00de51f0 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ + 0x00de5200 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ + 0x00de5210 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ + 0x00de5220 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ + 0x00de5230 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ + 0x00de5240 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ + 0x00de5250 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ + 0x00de5260 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ + 0x00de5270 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ + 0x00de5280 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ + 0x00de5290 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00de52a0 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ + 0x00de52b0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00de52c0 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ + 0x00de52d0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00de52e0 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ + 0x00de52f0 20766563 3420636f 6c6f7220 3d207465 vec4 color = te │ │ │ │ + 0x00de5300 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00de5310 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ + 0x00de5320 6473293b 200a2020 23656e64 6966200a ds); . #endif . │ │ │ │ + 0x00de5330 20202020 76656332 20707820 3d20765f vec2 px = v_ │ │ │ │ + 0x00de5340 6d61736b 54657843 6f6f7264 73202a20 maskTexCoords * │ │ │ │ + 0x00de5350 31362e30 3b200a20 20202076 65633220 16.0; . vec2 │ │ │ │ + 0x00de5360 63656c6c 203d2066 6c6f6f72 28707820 cell = floor(px │ │ │ │ + 0x00de5370 2f206b43 656c6c50 78293b20 0a202020 / kCellPx); . │ │ │ │ + 0x00de5380 20766563 3220746f 43656e74 6572203d vec2 toCenter = │ │ │ │ + 0x00de5390 200a2020 20202020 20202866 72616374 . (fract │ │ │ │ + 0x00de53a0 28707820 2f206b43 656c6c50 7829202d (px / kCellPx) - │ │ │ │ + 0x00de53b0 20302e35 29202a20 6b43656c 6c507820 0.5) * kCellPx │ │ │ │ + 0x00de53c0 2d202876 65633228 48617368 2863656c - (vec2(Hash(cel │ │ │ │ + 0x00de53d0 6c292c20 48617368 2863656c 6c202b20 l), Hash(cell + │ │ │ │ + 0x00de53e0 31392e37 2929202d 20302e35 29202a20 19.7)) - 0.5) * │ │ │ │ + 0x00de53f0 286b4a69 74746572 202a206b 43656c6c (kJitter * kCell │ │ │ │ + 0x00de5400 5078293b 200a2020 2020666c 6f617420 Px); . float │ │ │ │ + 0x00de5410 64203d20 6c656e67 74682874 6f43656e d = length(toCen │ │ │ │ + 0x00de5420 74657229 3b200a20 20202066 6c6f6174 ter); . float │ │ │ │ + 0x00de5430 20616120 3d206d61 78286677 69647468 aa = max(fwidth │ │ │ │ + 0x00de5440 2870782e 78292c20 66776964 74682870 (px.x), fwidth(p │ │ │ │ + 0x00de5450 782e7929 293b2020 2f2f2063 6f6e7469 x.y)); // conti │ │ │ │ + 0x00de5460 6e756f75 7320636f 6f72643a 206e6f20 nuous coord: no │ │ │ │ + 0x00de5470 66726163 742d7365 616d2064 65726976 fract-seam deriv │ │ │ │ + 0x00de5480 61746976 65207370 696b6520 0a202020 ative spike . │ │ │ │ + 0x00de5490 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ + 0x00de54a0 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ + 0x00de54b0 6570286b 52616469 75735078 202d2061 ep(kRadiusPx - a │ │ │ │ + 0x00de54c0 612c206b 52616469 75735078 202b2061 a, kRadiusPx + a │ │ │ │ + 0x00de54d0 612c2064 293b200a 20202020 636f6c6f a, d); . colo │ │ │ │ + 0x00de54e0 722e7267 62203d20 4d6f6475 6c617465 r.rgb = Modulate │ │ │ │ + 0x00de54f0 42795061 74746572 6e446f74 7328636f ByPatternDots(co │ │ │ │ + 0x00de5500 6c6f722e 7267622c 206b4461 726b656e lor.rgb, kDarken │ │ │ │ + 0x00de5510 2c20636f 76657261 6765293b 200a2020 , coverage); . │ │ │ │ + 0x00de5520 2020636f 6c6f722e 61202a3d 20755f6f color.a *= u_o │ │ │ │ + 0x00de5530 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ + 0x00de5540 72616743 6f6c6f72 203d2063 6f6c6f72 ragColor = color │ │ │ │ + 0x00de5550 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00de5560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de5570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de5580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de5590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de55a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de55b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de55c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de55d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de55e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de55f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de5600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de5610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de5620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de5630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de5640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de5650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de5660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de5670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de5680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de5690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de56a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de56b0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00de56c0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00de56d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00de56e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00de56f0 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00de5700 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00de5710 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00de5720 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00de5730 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00de5740 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00de5750 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00de5760 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00de5770 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00de5780 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00de5790 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00de57a0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00de57b0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00de57c0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00de57d0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00de57e0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00de57f0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00de5800 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00de5810 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00de5820 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00de5830 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00de5840 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00de5850 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00de5860 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00de5870 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00de5880 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00de5890 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00de58a0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00de58b0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00de58c0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00de58d0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00de58e0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00de58f0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00de5900 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00de5910 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00de5920 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00de5930 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00de5940 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00de5950 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00de5960 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00de5970 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00de5980 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00de5990 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00de59a0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00de59b0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00de59c0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00de59d0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00de59e0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00de59f0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00de5a00 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00de5a10 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00de5a20 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00de5a30 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00de5a40 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00de5a50 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00de5a60 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00de5a70 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00de5a80 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00de5a90 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00de5aa0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00de5ab0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00de5ac0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00de5ad0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00de5ae0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00de5af0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00de5b00 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00de5b10 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00de5b20 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00de5b30 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00de5b40 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00de5b50 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00de5b60 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00de5b70 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00de5b80 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00de5b90 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00de5ba0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00de5bb0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00de5bc0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00de5bd0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00de5be0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00de5bf0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00de5c00 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00de5c10 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00de5c20 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00de5c30 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00de5c40 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00de5c50 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00de5c60 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00de5c70 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00de5c80 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00de5c90 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00de5ca0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00de5cb0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00de5cc0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00de5cd0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00de5ce0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00de5cf0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00de5d00 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00de5d10 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00de5d20 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00de5d30 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00de5d40 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00de5d50 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00de5d60 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00de5d70 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00de5d80 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00de5d90 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00de5da0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00de5db0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00de5dc0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00de5dd0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00de5de0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00de5df0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00de5e00 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00de5e10 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00de5e20 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00de5e30 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00de5e40 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00de5e50 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00de5e60 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00de5e70 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00de5e80 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00de5e90 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00de5ea0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00de5eb0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00de5ec0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00de5ed0 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00de5ee0 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00de5ef0 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00de5f00 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00de5f10 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00de5f20 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00de5f30 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00de5f40 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00de5f50 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00de5f60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de5f70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de5f80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de5f90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de5fa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de5fb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de5fc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de5fd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de5fe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de5ff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de6000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de6010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de6020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de6030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de6040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de6050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de6060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de6070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de6080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de6090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de60a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de60b0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00de60c0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00de60d0 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ + 0x00de60e0 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ + 0x00de60f0 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ + 0x00de6100 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00de6110 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00de6120 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00de6130 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00de6140 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00de6150 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00de6160 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00de6170 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00de6180 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00de6190 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00de61a0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00de61b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00de61c0 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ + 0x00de61d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00de61e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00de61f0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00de6200 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00de6210 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00de6220 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00de6230 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00de6240 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00de6250 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00de6260 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00de6270 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00de6280 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00de6290 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00de62a0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00de62b0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00de62c0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00de62d0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00de62e0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00de62f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00de6300 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00de6310 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00de6320 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00de6330 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00de6340 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00de6350 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00de6360 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00de6370 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00de6380 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00de6390 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00de63a0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00de63b0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00de63c0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00de63d0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00de63e0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00de63f0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00de6400 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00de6410 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00de6420 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00de6430 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00de6440 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00de6450 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00de6460 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00de6470 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00de6480 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00de6490 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00de64a0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00de64b0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00de64c0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00de64d0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00de64e0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00de64f0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00de6500 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00de6510 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00de6520 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00de6530 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00de6540 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00de6550 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00de6560 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00de6570 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00de6580 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00de6590 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00de65a0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00de65b0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00de65c0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00de65d0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00de65e0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00de65f0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00de6600 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00de6610 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00de6620 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00de6630 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00de6640 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00de6650 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00de6660 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00de6670 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00de6680 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00de6690 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00de66a0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00de66b0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00de66c0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00de66d0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00de66e0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00de66f0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00de6700 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00de6710 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00de6720 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00de6730 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00de6740 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00de6750 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00de6760 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ + 0x00de6770 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ + 0x00de6780 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ + 0x00de6790 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00de67a0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00de67b0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00de67c0 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ + 0x00de67d0 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ + 0x00de67e0 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ + 0x00de67f0 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ + 0x00de6800 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ + 0x00de6810 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ + 0x00de6820 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ + 0x00de6830 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00de6840 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00de6850 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ + 0x00de6860 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de6870 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de6880 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de6890 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de68a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de68b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de68c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de68d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de68e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de68f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de6900 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de6910 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de6920 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de6930 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de6940 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de6950 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de6960 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de6970 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de6980 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de6990 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de69a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de69b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00de69c0 72643b20 0a20206f 75742076 65633420 rd; . out vec4 │ │ │ │ + 0x00de69d0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00de69e0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00de69f0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00de6a00 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00de6a10 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00de6a20 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00de6a30 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00de6a40 666f726d 20766563 3420755f 74726166 form vec4 u_traf │ │ │ │ + 0x00de6a50 66696350 6172616d 733b200a 2020756e ficParams; . un │ │ │ │ + 0x00de6a60 69666f72 6d207665 63342075 5f6f7574 iform vec4 u_out │ │ │ │ + 0x00de6a70 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00de6a80 69666f72 6d207665 63342075 5f6c6967 iform vec4 u_lig │ │ │ │ + 0x00de6a90 68744172 726f7743 6f6c6f72 3b200a20 htArrowColor; . │ │ │ │ + 0x00de6aa0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00de6ab0 6461726b 4172726f 77436f6c 6f723b20 darkArrowColor; │ │ │ │ + 0x00de6ac0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00de6ad0 20755f6f 75746c69 6e653b20 0a202075 u_outline; . u │ │ │ │ + 0x00de6ae0 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00de6af0 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00de6b00 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00de6b10 6f6c6f72 5465783b 200a2020 636f6e73 olorTex; . cons │ │ │ │ + 0x00de6b20 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00de6b30 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00de6b40 2e303b20 0a20204c 4f575f50 20766563 .0; . LOW_P vec │ │ │ │ + 0x00de6b50 33204d6f 64756c61 74654279 50617474 3 ModulateByPatt │ │ │ │ + 0x00de6b60 65726e44 6f747328 4c4f575f 50207665 ernDots(LOW_P ve │ │ │ │ + 0x00de6b70 63332063 6f6c6f72 2c20666c 6f617420 c3 color, float │ │ │ │ + 0x00de6b80 6461726b 656e2c20 666c6f61 7420636f darken, float co │ │ │ │ + 0x00de6b90 76657261 67652920 0a20207b 200a2020 verage) . { . │ │ │ │ + 0x00de6ba0 2020636f 6e737420 666c6f61 74206b4c const float kL │ │ │ │ + 0x00de6bb0 69676874 656e203d 20302e30 37353b20 ighten = 0.075; │ │ │ │ + 0x00de6bc0 0a202020 20696620 28646f74 28636f6c . if (dot(col │ │ │ │ + 0x00de6bd0 6f722c20 76656333 28302e32 3132362c or, vec3(0.2126, │ │ │ │ + 0x00de6be0 20302e37 3135322c 20302e30 37323229 0.7152, 0.0722) │ │ │ │ + 0x00de6bf0 29203c20 302e3529 200a2020 20202020 ) < 0.5) . │ │ │ │ + 0x00de6c00 72657475 726e2063 6f6c6f72 202b2063 return color + c │ │ │ │ + 0x00de6c10 6f766572 61676520 2a206b4c 69676874 overage * kLight │ │ │ │ + 0x00de6c20 656e3b20 0a202020 20726574 75726e20 en; . return │ │ │ │ + 0x00de6c30 636f6c6f 72202a20 6d697828 312e302c color * mix(1.0, │ │ │ │ + 0x00de6c40 20646172 6b656e2c 20636f76 65726167 darken, coverag │ │ │ │ + 0x00de6c50 65293b20 0a20207d 200a2020 766f6964 e); . } . void │ │ │ │ + 0x00de6c60 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00de6c70 20207665 63342063 6f6c6f72 203d2074 vec4 color = t │ │ │ │ + 0x00de6c80 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00de6c90 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00de6ca0 7264293b 200a2020 2020765f 46726167 rd); . v_Frag │ │ │ │ + 0x00de6cb0 436f6c6f 72203d20 76656334 28636f6c Color = vec4(col │ │ │ │ + 0x00de6cc0 6f722e72 67622c20 755f6f70 61636974 or.rgb, u_opacit │ │ │ │ + 0x00de6cd0 79293b20 0a20207d 200a0000 00000000 y); . } ....... │ │ │ │ + 0x00de6ce0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de6cf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de6d00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de6d10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de6d20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de6d30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de6d40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de6d50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de6d60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de6d70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de6d80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de6d90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de6da0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de6db0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de6dc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de6dd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de6de0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de6df0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de6e00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de6e10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de6e20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de6e30 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00de6e40 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00de6e50 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ + 0x00de6e60 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ + 0x00de6e70 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00de6e80 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ + 0x00de6e90 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ + 0x00de6ea0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00de6eb0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00de6ec0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00de6ed0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00de6ee0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00de6ef0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00de6f00 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00de6f10 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ + 0x00de6f20 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ + 0x00de6f30 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ + 0x00de6f40 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ + 0x00de6f50 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ + 0x00de6f60 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ + 0x00de6f70 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ + 0x00de6f80 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ + 0x00de6f90 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00de6fa0 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ + 0x00de6fb0 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00de6fc0 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ + 0x00de6fd0 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ + 0x00de6fe0 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ + 0x00de6ff0 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ + 0x00de7000 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ + 0x00de7010 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ + 0x00de7020 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ + 0x00de7030 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ + 0x00de7040 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00de7050 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00de7060 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00de7070 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00de7080 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00de7090 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00de70a0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00de70b0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00de70c0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00de70d0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00de70e0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00de70f0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00de7100 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00de7110 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00de7120 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00de7130 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00de7140 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00de7150 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00de7160 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00de7170 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00de7180 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00de7190 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de71a0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00de71b0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00de71c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00de71d0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00de71e0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00de71f0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00de7200 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00de7210 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00de7220 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00de7230 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00de7240 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00de7250 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00de7260 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00de7270 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00de7280 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00de7290 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00de72a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00de72b0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00de72c0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00de72d0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00de72e0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00de72f0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00de7300 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00de7310 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00de7320 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00de7330 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00de7340 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00de7350 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00de7360 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00de7370 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00de7380 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00de7390 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00de73a0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00de73b0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00de73c0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00de73d0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00de73e0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00de73f0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00de7400 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00de7410 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00de7420 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00de7430 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00de7440 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00de7450 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00de7460 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00de7470 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00de7480 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00de7490 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00de74a0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00de74b0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00de74c0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00de74d0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00de74e0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00de74f0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00de7500 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00de7510 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00de7520 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00de7530 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00de7540 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00de7550 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00de7560 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00de7570 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00de7580 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00de7590 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00de75a0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00de75b0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00de75c0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00de75d0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00de75e0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00de75f0 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00de7600 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00de7610 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00de7620 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00de7630 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00de7640 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ + 0x00de7650 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00de7660 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ + 0x00de7670 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ + 0x00de7680 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ + 0x00de7690 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ + 0x00de76a0 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ + 0x00de76b0 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ + 0x00de76c0 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ + 0x00de76d0 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ + 0x00de76e0 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ + 0x00de76f0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00de7700 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ + 0x00de7710 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ + 0x00de7720 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ + 0x00de7730 0a202020 20202020 20202020 20202020 . │ │ │ │ + 0x00de7740 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00de7750 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00de7760 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ + 0x00de7770 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ + 0x00de7780 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ + 0x00de7790 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ + 0x00de77a0 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ + 0x00de77b0 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ + 0x00de77c0 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ + 0x00de77d0 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ + 0x00de77e0 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ + 0x00de77f0 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ + 0x00de7800 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ + 0x00de7810 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ + 0x00de7820 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ + 0x00de7830 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00de7840 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00de7850 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ + 0x00de7860 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ + 0x00de7870 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ + 0x00de7880 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ + 0x00de7890 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00de78a0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00de78b0 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ + 0x00de78c0 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00de78d0 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00de78e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de78f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de7900 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de7910 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de7920 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de7930 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de7940 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de7950 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de7960 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de7970 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de7980 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de7990 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de79a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de79b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de79c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de79d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de79e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de79f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de7a00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de7a10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de7a20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de7a30 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00de7a40 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00de7a50 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00de7a60 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00de7a70 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00de7a80 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00de7a90 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00de7aa0 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00de7ab0 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00de7ac0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00de7ad0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00de7ae0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00de7af0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00de7b00 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00de7b10 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00de7b20 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00de7b30 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00de7b40 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00de7b50 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00de7b60 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00de7b70 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00de7b80 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00de7b90 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00de7ba0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00de7bb0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00de7bc0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00de7bd0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00de7be0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00de7bf0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00de7c00 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00de7c10 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00de7c20 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00de7c30 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00de7c40 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de7c50 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00de7c60 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00de7c70 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00de7c80 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00de7c90 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00de7ca0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00de7cb0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00de7cc0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00de7cd0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00de7ce0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00de7cf0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00de7d00 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00de7d10 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00de7d20 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00de7d30 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00de7d40 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00de7d50 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00de7d60 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00de7d70 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00de7d80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00de7d90 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00de7da0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00de7db0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00de7dc0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00de7dd0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00de7de0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00de7df0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00de7e00 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00de7e10 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00de7e20 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00de7e30 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00de7e40 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00de7e50 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00de7e60 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00de7e70 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00de7e80 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00de7e90 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00de7ea0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00de7eb0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00de7ec0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00de7ed0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00de7ee0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00de7ef0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00de7f00 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00de7f10 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00de7f20 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00de7f30 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00de7f40 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00de7f50 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00de7f60 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00de7f70 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00de7f80 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00de7f90 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00de7fa0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00de7fb0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00de7fc0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00de7fd0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00de7fe0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00de7ff0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00de8000 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00de8010 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00de8020 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00de8030 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00de8040 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00de8050 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00de8060 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00de8070 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00de8080 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00de8090 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00de80a0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00de80b0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00de80c0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00de80d0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00de80e0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00de80f0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00de8100 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00de8110 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00de8120 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00de8130 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00de8140 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00de8150 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00de8160 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00de8170 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00de8180 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00de8190 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00de81a0 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00de81b0 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00de81c0 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00de81d0 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00de81e0 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ + 0x00de81f0 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ + 0x00de8200 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00de8210 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ + 0x00de8220 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ + 0x00de8230 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00de8240 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ + 0x00de8250 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ + 0x00de8260 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ + 0x00de8270 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ + 0x00de8280 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ + 0x00de8290 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00de82a0 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ + 0x00de82b0 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ + 0x00de82c0 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ + 0x00de82d0 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ + 0x00de82e0 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ + 0x00de82f0 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ + 0x00de8300 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ + 0x00de8310 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ + 0x00de8320 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00de8330 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ + 0x00de8340 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ + 0x00de8350 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ + 0x00de8360 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ + 0x00de8370 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ + 0x00de8380 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ + 0x00de8390 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ + 0x00de83a0 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ + 0x00de83b0 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ + 0x00de83c0 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ + 0x00de83d0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de83e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de83f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de8400 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de8410 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de8420 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de8430 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de8440 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de8450 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de8460 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de8470 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de8480 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de8490 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de84a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de84b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de84c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de84d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de84e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de84f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de8500 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de8510 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de8520 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de8530 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00de8540 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00de8550 765f6f66 66736574 3b200a20 206f7574 v_offset; . out │ │ │ │ + 0x00de8560 20766563 3420765f 46726167 436f6c6f vec4 v_FragColo │ │ │ │ + 0x00de8570 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00de8580 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00de8590 4d657472 6963733b 200a2020 756e6966 Metrics; . unif │ │ │ │ + 0x00de85a0 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00de85b0 636f6c6f 72546578 3b200a20 20756e69 colorTex; . uni │ │ │ │ + 0x00de85c0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00de85d0 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ + 0x00de85e0 65783b20 0a202023 64656669 6e652053 ex; . #define S │ │ │ │ + 0x00de85f0 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00de8600 726f2874 65782c20 636f6f72 64292074 ro(tex, coord) t │ │ │ │ + 0x00de8610 65787475 72654c6f 64287465 782c2063 extureLod(tex, c │ │ │ │ + 0x00de8620 6f6f7264 2c20302e 3029200a 2020636f oord, 0.0) . co │ │ │ │ + 0x00de8630 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00de8640 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00de8650 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ + 0x00de8660 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ + 0x00de8670 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ + 0x00de8680 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ + 0x00de8690 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ + 0x00de86a0 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ + 0x00de86b0 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ + 0x00de86c0 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ + 0x00de86d0 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ + 0x00de86e0 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ + 0x00de86f0 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ + 0x00de8700 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ + 0x00de8710 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ + 0x00de8720 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ + 0x00de8730 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ + 0x00de8740 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ + 0x00de8750 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ + 0x00de8760 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ + 0x00de8770 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00de8780 20202020 76656334 20613b20 0a202020 vec4 a; . │ │ │ │ + 0x00de8790 20612e78 203d2074 65787475 72652875 a.x = texture(u │ │ │ │ + 0x00de87a0 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ + 0x00de87b0 65782c20 765f6f66 66736574 2e787929 ex, v_offset.xy) │ │ │ │ + 0x00de87c0 2e613b20 2f2f2052 69676874 200a2020 .a; // Right . │ │ │ │ + 0x00de87d0 2020612e 79203d20 74657874 75726528 a.y = texture( │ │ │ │ + 0x00de87e0 755f626c 656e6469 6e675765 69676874 u_blendingWeight │ │ │ │ + 0x00de87f0 5465782c 20765f6f 66667365 742e7a77 Tex, v_offset.zw │ │ │ │ + 0x00de8800 292e673b 202f2f20 546f7020 0a202020 ).g; // Top . │ │ │ │ + 0x00de8810 20612e77 7a203d20 74657874 75726528 a.wz = texture( │ │ │ │ + 0x00de8820 755f626c 656e6469 6e675765 69676874 u_blendingWeight │ │ │ │ + 0x00de8830 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00de8840 6f6f7264 73292e78 7a3b202f 2f20426f oords).xz; // Bo │ │ │ │ + 0x00de8850 74746f6d 202f204c 65667420 0a202020 ttom / Left . │ │ │ │ + 0x00de8860 20696620 28646f74 28612c20 76656334 if (dot(a, vec4 │ │ │ │ + 0x00de8870 28312e30 2c20312e 302c2031 2e302c20 (1.0, 1.0, 1.0, │ │ │ │ + 0x00de8880 312e3029 29203c20 31652d35 29200a20 1.0)) < 1e-5) . │ │ │ │ + 0x00de8890 2020207b 200a2020 20202020 765f4672 { . v_Fr │ │ │ │ + 0x00de88a0 6167436f 6c6f7220 3d207465 78747572 agColor = textur │ │ │ │ + 0x00de88b0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00de88c0 636f6c6f 72546578 436f6f72 6473293b colorTexCoords); │ │ │ │ + 0x00de88d0 200a2020 20207d20 0a202020 20656c73 . } . els │ │ │ │ + 0x00de88e0 65200a20 2020207b 200a2020 20202020 e . { . │ │ │ │ + 0x00de88f0 76656334 20626c65 6e64696e 674f6666 vec4 blendingOff │ │ │ │ + 0x00de8900 73657420 3d207665 63342830 2e302c20 set = vec4(0.0, │ │ │ │ + 0x00de8910 612e792c 20302e30 2c20612e 77293b20 a.y, 0.0, a.w); │ │ │ │ + 0x00de8920 0a202020 20202076 65633220 626c656e . vec2 blen │ │ │ │ + 0x00de8930 64696e67 57656967 6874203d 20612e79 dingWeight = a.y │ │ │ │ + 0x00de8940 773b200a 20202020 20206966 20286d61 w; . if (ma │ │ │ │ + 0x00de8950 7828612e 782c2061 2e7a2920 3e206d61 x(a.x, a.z) > ma │ │ │ │ + 0x00de8960 7828612e 792c2061 2e772929 200a2020 x(a.y, a.w)) . │ │ │ │ + 0x00de8970 20202020 7b200a20 20202020 20202062 { . b │ │ │ │ + 0x00de8980 6c656e64 696e674f 66667365 74203d20 lendingOffset = │ │ │ │ + 0x00de8990 76656334 28612e78 2c20302e 302c2061 vec4(a.x, 0.0, a │ │ │ │ + 0x00de89a0 2e7a2c20 302e3029 3b200a20 20202020 .z, 0.0); . │ │ │ │ + 0x00de89b0 20202062 6c656e64 696e6757 65696768 blendingWeigh │ │ │ │ + 0x00de89c0 74203d20 612e787a 3b200a20 20202020 t = a.xz; . │ │ │ │ + 0x00de89d0 207d200a 20202020 2020626c 656e6469 } . blendi │ │ │ │ + 0x00de89e0 6e675765 69676874 202f3d20 646f7428 ngWeight /= dot( │ │ │ │ + 0x00de89f0 626c656e 64696e67 57656967 68742c20 blendingWeight, │ │ │ │ + 0x00de8a00 76656332 28312e30 2c20312e 3029293b vec2(1.0, 1.0)); │ │ │ │ + 0x00de8a10 200a2020 20202020 76656334 20626320 . vec4 bc │ │ │ │ + 0x00de8a20 3d20626c 656e6469 6e674f66 66736574 = blendingOffset │ │ │ │ + 0x00de8a30 202a2076 65633428 755f6672 616d6562 * vec4(u_frameb │ │ │ │ + 0x00de8a40 75666665 724d6574 72696373 2e78792c ufferMetrics.xy, │ │ │ │ + 0x00de8a50 202d755f 6672616d 65627566 6665724d -u_framebufferM │ │ │ │ + 0x00de8a60 65747269 63732e78 79293b20 0a202020 etrics.xy); . │ │ │ │ + 0x00de8a70 20202062 63202b3d 20765f63 6f6c6f72 bc += v_color │ │ │ │ + 0x00de8a80 54657843 6f6f7264 732e7879 78793b20 TexCoords.xyxy; │ │ │ │ + 0x00de8a90 0a202020 20202076 65633420 636f6c6f . vec4 colo │ │ │ │ + 0x00de8aa0 72203d20 626c656e 64696e67 57656967 r = blendingWeig │ │ │ │ + 0x00de8ab0 68742e78 202a2053 4d414153 616d706c ht.x * SMAASampl │ │ │ │ + 0x00de8ac0 654c6576 656c5a65 726f2875 5f636f6c eLevelZero(u_col │ │ │ │ + 0x00de8ad0 6f725465 782c2062 632e7879 293b200a orTex, bc.xy); . │ │ │ │ + 0x00de8ae0 20202020 2020636f 6c6f7220 2b3d2062 color += b │ │ │ │ + 0x00de8af0 6c656e64 696e6757 65696768 742e7920 lendingWeight.y │ │ │ │ + 0x00de8b00 2a20534d 41415361 6d706c65 4c657665 * SMAASampleLeve │ │ │ │ + 0x00de8b10 6c5a6572 6f28755f 636f6c6f 72546578 lZero(u_colorTex │ │ │ │ + 0x00de8b20 2c206263 2e7a7729 3b200a20 20202020 , bc.zw); . │ │ │ │ + 0x00de8b30 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ + 0x00de8b40 6f6c6f72 3b200a20 2020207d 200a2020 olor; . } . │ │ │ │ + 0x00de8b50 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00de8b60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de8b70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de8b80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de8b90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de8ba0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de8bb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de8bc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de8bd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de8be0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de8bf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de8c00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de8c10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de8c20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de8c30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de8c40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de8c50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de8c60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de8c70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de8c80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de8c90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de8ca0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de8cb0 63342076 5f6e6f72 6d616c3b 200a2020 c4 v_normal; . │ │ │ │ + 0x00de8cc0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00de8cd0 46200a20 20696e20 4c4f575f 50207665 F . in LOW_P ve │ │ │ │ + 0x00de8ce0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00de8cf0 656c7365 200a2020 696e2076 65633220 else . in vec2 │ │ │ │ + 0x00de8d00 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00de8d10 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00de8d20 706c6572 32442075 5f636f6c 6f725465 pler2D u_colorTe │ │ │ │ + 0x00de8d30 783b200a 20202365 6e646966 200a2020 x; . #endif . │ │ │ │ + 0x00de8d40 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00de8d50 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00de8d60 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00de8d70 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00de8d80 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00de8d90 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00de8da0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00de8db0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00de8dc0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00de8dd0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00de8de0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00de8df0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00de8e00 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00de8e10 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00de8e20 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00de8e30 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00de8e40 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00de8e50 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00de8e60 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00de8e70 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00de8e80 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00de8e90 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00de8ea0 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ + 0x00de8eb0 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ + 0x00de8ec0 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ + 0x00de8ed0 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ + 0x00de8ee0 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ + 0x00de8ef0 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ + 0x00de8f00 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ + 0x00de8f10 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ + 0x00de8f20 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ + 0x00de8f30 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ + 0x00de8f40 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ + 0x00de8f50 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ + 0x00de8f60 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ + 0x00de8f70 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ + 0x00de8f80 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ + 0x00de8f90 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ + 0x00de8fa0 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ + 0x00de8fb0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00de8fc0 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ + 0x00de8fd0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00de8fe0 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ + 0x00de8ff0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00de9000 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ + 0x00de9010 20766563 3420636f 6c6f7220 3d207465 vec4 color = te │ │ │ │ + 0x00de9020 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00de9030 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ + 0x00de9040 6473293b 200a2020 23656e64 6966200a ds); . #endif . │ │ │ │ + 0x00de9050 20202020 666c6f61 74207231 203d2028 float r1 = ( │ │ │ │ + 0x00de9060 765f6e6f 726d616c 2e7a202d 20616150 v_normal.z - aaP │ │ │ │ + 0x00de9070 6978656c 73436f75 6e742920 2a202876 ixelsCount) * (v │ │ │ │ + 0x00de9080 5f6e6f72 6d616c2e 7a202d20 61615069 _normal.z - aaPi │ │ │ │ + 0x00de9090 78656c73 436f756e 74293b20 0a202020 xelsCount); . │ │ │ │ + 0x00de90a0 20666c6f 61742072 32203d20 765f6e6f float r2 = v_no │ │ │ │ + 0x00de90b0 726d616c 2e78202a 20765f6e 6f726d61 rmal.x * v_norma │ │ │ │ + 0x00de90c0 6c2e7820 2b20765f 6e6f726d 616c2e79 l.x + v_normal.y │ │ │ │ + 0x00de90d0 202a2076 5f6e6f72 6d616c2e 793b200a * v_normal.y; . │ │ │ │ + 0x00de90e0 20202020 666c6f61 74207233 203d2076 float r3 = v │ │ │ │ + 0x00de90f0 5f6e6f72 6d616c2e 7a202a20 765f6e6f _normal.z * v_no │ │ │ │ + 0x00de9100 726d616c 2e7a3b20 0a202020 20666c6f rmal.z; . flo │ │ │ │ + 0x00de9110 61742061 6c706861 203d206d 69782873 at alpha = mix(s │ │ │ │ + 0x00de9120 74657028 72332c20 7232292c 20736d6f tep(r3, r2), smo │ │ │ │ + 0x00de9130 6f746873 74657028 72312c20 72332c20 othstep(r1, r3, │ │ │ │ + 0x00de9140 7232292c 20765f6e 6f726d61 6c2e7729 r2), v_normal.w) │ │ │ │ + 0x00de9150 3b200a20 2020204c 4f575f50 20766563 ; . LOW_P vec │ │ │ │ + 0x00de9160 34206669 6e616c43 6f6c6f72 203d2063 4 finalColor = c │ │ │ │ + 0x00de9170 6f6c6f72 3b200a20 20202066 696e616c olor; . final │ │ │ │ + 0x00de9180 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ + 0x00de9190 6f6c6f72 2e61202a 20755f6f 70616369 olor.a * u_opaci │ │ │ │ + 0x00de91a0 7479202a 2028312e 30202d20 616c7068 ty * (1.0 - alph │ │ │ │ + 0x00de91b0 61293b20 0a202020 20696620 2866696e a); . if (fin │ │ │ │ + 0x00de91c0 616c436f 6c6f722e 61203d3d 20302e30 alColor.a == 0.0 │ │ │ │ + 0x00de91d0 29200a20 20202020 20646973 63617264 ) . discard │ │ │ │ + 0x00de91e0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00de91f0 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ + 0x00de9200 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00de9210 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00de9220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de9230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de9240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de9250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de9260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de9270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de9280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de9290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de92a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de92b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de92c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de92d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de92e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de92f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de9300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de9310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de9320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de9330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de9340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de9350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de9360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de9370 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00de9380 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00de9390 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00de93a0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00de93b0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00de93c0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00de93d0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00de93e0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00de93f0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00de9400 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00de9410 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00de9420 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00de9430 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00de9440 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00de9450 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00de9460 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00de9470 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00de9480 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00de9490 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00de94a0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00de94b0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00de94c0 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00de94d0 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00de94e0 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00de94f0 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00de9500 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00de9510 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00de9520 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00de9530 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00de9540 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00de9550 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00de9560 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00de9570 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00de9580 323b200a 2020666c 6f617420 616c7068 2; . float alph │ │ │ │ + 0x00de9590 6146726f 6d506174 7465726e 28666c6f aFromPattern(flo │ │ │ │ + 0x00de95a0 61742063 75724c65 6e2c2066 6c6f6174 at curLen, float │ │ │ │ + 0x00de95b0 20646173 684c656e 2c20666c 6f617420 dashLen, float │ │ │ │ + 0x00de95c0 6761704c 656e2920 0a20207b 200a2020 gapLen) . { . │ │ │ │ + 0x00de95d0 2020666c 6f617420 6c656e20 3d206461 float len = da │ │ │ │ + 0x00de95e0 73684c65 6e202b20 6761704c 656e3b20 shLen + gapLen; │ │ │ │ + 0x00de95f0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00de9600 74203d20 66726163 74286375 724c656e t = fract(curLen │ │ │ │ + 0x00de9610 202f206c 656e2920 2a206c65 6e3b200a / len) * len; . │ │ │ │ + 0x00de9620 20202020 72657475 726e2073 74657028 return step( │ │ │ │ + 0x00de9630 6f666673 65742c20 64617368 4c656e29 offset, dashLen) │ │ │ │ + 0x00de9640 3b200a20 207d200a 2020636f 6e737420 ; . } . const │ │ │ │ + 0x00de9650 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00de9660 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00de9670 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ + 0x00de9680 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ + 0x00de9690 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ + 0x00de96a0 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ + 0x00de96b0 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ + 0x00de96c0 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ + 0x00de96d0 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ + 0x00de96e0 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ + 0x00de96f0 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ + 0x00de9700 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ + 0x00de9710 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ + 0x00de9720 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ + 0x00de9730 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ + 0x00de9740 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ + 0x00de9750 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ + 0x00de9760 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ + 0x00de9770 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ + 0x00de9780 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00de9790 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00de97a0 69662028 765f6c65 6e677468 2e78203c if (v_length.x < │ │ │ │ + 0x00de97b0 20765f6c 656e6774 682e7a29 200a2020 v_length.z) . │ │ │ │ + 0x00de97c0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00de97d0 20207665 63322063 6f656673 203d2073 vec2 coefs = s │ │ │ │ + 0x00de97e0 74657028 765f6c65 6e677468 2e78782c tep(v_length.xx, │ │ │ │ + 0x00de97f0 20755f66 616b6542 6f726465 7273293b u_fakeBorders); │ │ │ │ + 0x00de9800 200a2020 2020636f 6566732e 79203d20 . coefs.y = │ │ │ │ + 0x00de9810 312e3020 2d20636f 6566732e 793b200a 1.0 - coefs.y; . │ │ │ │ + 0x00de9820 20202020 76656334 206d6169 6e436f6c vec4 mainCol │ │ │ │ + 0x00de9830 6f72203d 206d6978 28755f63 6f6c6f72 or = mix(u_color │ │ │ │ + 0x00de9840 2c20755f 66616b65 436f6c6f 722c2063 , u_fakeColor, c │ │ │ │ + 0x00de9850 6f656673 2e78293b 200a2020 20206d61 oefs.x); . ma │ │ │ │ + 0x00de9860 696e436f 6c6f7220 3d206d69 78286d61 inColor = mix(ma │ │ │ │ + 0x00de9870 696e436f 6c6f722c 20755f66 616b6543 inColor, u_fakeC │ │ │ │ + 0x00de9880 6f6c6f72 2c20636f 6566732e 79293b20 olor, coefs.y); │ │ │ │ + 0x00de9890 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ + 0x00de98a0 3d206d61 696e436f 6c6f7220 2b20765f = mainColor + v_ │ │ │ │ + 0x00de98b0 636f6c6f 723b200a 20202020 636f6c6f color; . colo │ │ │ │ + 0x00de98c0 722e6120 2a3d2028 312e3020 2d20736d r.a *= (1.0 - sm │ │ │ │ + 0x00de98d0 6f6f7468 73746570 286b416e 7469616c oothstep(kAntial │ │ │ │ + 0x00de98e0 69617369 6e675468 72657368 6f6c642c iasingThreshold, │ │ │ │ + 0x00de98f0 20312e30 2c206162 7328765f 6c656e67 1.0, abs(v_leng │ │ │ │ + 0x00de9900 74682e79 29292920 2a200a20 20202020 th.y))) * . │ │ │ │ + 0x00de9910 20202020 20202020 20202061 6c706861 alpha │ │ │ │ + 0x00de9920 46726f6d 50617474 65726e28 765f6c65 FromPattern(v_le │ │ │ │ + 0x00de9930 6e677468 2e782c20 755f7061 74746572 ngth.x, u_patter │ │ │ │ + 0x00de9940 6e2e782c 20755f70 61747465 726e2e79 n.x, u_pattern.y │ │ │ │ + 0x00de9950 293b200a 20202020 636f6c6f 72203d20 ); . color = │ │ │ │ + 0x00de9960 76656334 286d6978 28636f6c 6f722e72 vec4(mix(color.r │ │ │ │ + 0x00de9970 67622c20 755f6d61 736b436f 6c6f722e gb, u_maskColor. │ │ │ │ + 0x00de9980 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ + 0x00de9990 2e61292c 20636f6c 6f722e61 293b200a .a), color.a); . │ │ │ │ + 0x00de99a0 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ + 0x00de99b0 3d20636f 6c6f723b 200a2020 7d200a00 = color; . } .. │ │ │ │ + 0x00de99c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00de99d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00de99e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00de99f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00de9a00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00de9a10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00de9a20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00de9a30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00de9a40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00de9a50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00de9a60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00de9a70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00de9a80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00de9a90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00de9aa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00de9ab0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00de9ac0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00de9ad0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00de9ae0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00de9af0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00de9b00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00de9b10 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00de9b20 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ + 0x00de9b30 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ + 0x00de9b40 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ + 0x00de9b50 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ + 0x00de9b60 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ + 0x00de9b70 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ + 0x00de9b80 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ + 0x00de9b90 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ + 0x00de9ba0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00de9bb0 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ + 0x00de9bc0 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ + 0x00de9bd0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00de9be0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00de9bf0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00de9c00 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00de9c10 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00de9c20 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00de9c30 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00de9c40 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00de9c50 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00de9c60 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00de9c70 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00de9c80 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00de9c90 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00de9ca0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00de9cb0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00de9cc0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00de9cd0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00de9ce0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00de9cf0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de9d00 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00de9d10 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00de9d20 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00de9d30 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00de9d40 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00de9d50 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00de9d60 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00de9d70 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00de9d80 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00de9d90 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00de9da0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00de9db0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00de9dc0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00de9dd0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00de9de0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00de9df0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00de9e00 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00de9e10 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00de9e20 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00de9e30 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00de9e40 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00de9e50 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00de9e60 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00de9e70 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00de9e80 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00de9e90 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00de9ea0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00de9eb0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00de9ec0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00de9ed0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00de9ee0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00de9ef0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00de9f00 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00de9f10 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00de9f20 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00de9f30 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00de9f40 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00de9f50 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00de9f60 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00de9f70 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00de9f80 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00de9f90 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00de9fa0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00de9fb0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00de9fc0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00de9fd0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00de9fe0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00de9ff0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00dea000 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00dea010 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00dea020 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00dea030 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00dea040 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00dea050 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00dea060 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00dea070 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00dea080 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00dea090 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00dea0a0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00dea0b0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00dea0c0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00dea0d0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00dea0e0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00dea0f0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00dea100 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00dea110 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00dea120 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00dea130 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00dea140 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00dea150 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00dea160 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00dea170 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ + 0x00dea180 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ + 0x00dea190 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ + 0x00dea1a0 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ + 0x00dea1b0 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ + 0x00dea1c0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00dea1d0 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ + 0x00dea1e0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00dea1f0 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00dea200 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00dea210 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00dea220 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00dea230 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ + 0x00dea240 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ + 0x00dea250 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ + 0x00dea260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dea270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dea280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dea290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dea2a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dea2b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dea2c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dea2d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dea2e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dea2f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dea300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dea310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dea320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dea330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dea340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dea350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dea360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dea370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dea380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dea390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dea3a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dea3b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00dea3c0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00dea3d0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00dea3e0 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00dea3f0 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00dea400 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00dea410 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00dea420 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00dea430 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00dea440 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00dea450 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00dea460 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00dea470 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00dea480 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00dea490 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00dea4a0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00dea4b0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00dea4c0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dea4d0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00dea4e0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00dea4f0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00dea500 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00dea510 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00dea520 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00dea530 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00dea540 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00dea550 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00dea560 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00dea570 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00dea580 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00dea590 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00dea5a0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00dea5b0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00dea5c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dea5d0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00dea5e0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00dea5f0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00dea600 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dea610 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00dea620 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00dea630 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00dea640 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00dea650 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00dea660 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dea670 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00dea680 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00dea690 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00dea6a0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00dea6b0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00dea6c0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00dea6d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dea6e0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00dea6f0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00dea700 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dea710 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00dea720 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00dea730 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dea740 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00dea750 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00dea760 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00dea770 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00dea780 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00dea790 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00dea7a0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00dea7b0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00dea7c0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00dea7d0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00dea7e0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00dea7f0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00dea800 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00dea810 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00dea820 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00dea830 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00dea840 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00dea850 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00dea860 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00dea870 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00dea880 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00dea890 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00dea8a0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00dea8b0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00dea8c0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00dea8d0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00dea8e0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00dea8f0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00dea900 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00dea910 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00dea920 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00dea930 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00dea940 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00dea950 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00dea960 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00dea970 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00dea980 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00dea990 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00dea9a0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00dea9b0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00dea9c0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00dea9d0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00dea9e0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00dea9f0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00deaa00 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00deaa10 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00deaa20 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00deaa30 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00deaa40 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00deaa50 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00deaa60 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00deaa70 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00deaa80 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00deaa90 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00deaaa0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00deaab0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00deaac0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00deaad0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00deaae0 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00deaaf0 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00deab00 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00deab10 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00deab20 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00deab30 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00deab40 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00deab50 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00deab60 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ + 0x00deab70 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ + 0x00deab80 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ + 0x00deab90 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ + 0x00deaba0 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ + 0x00deabb0 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ + 0x00deabc0 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ + 0x00deabd0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00deabe0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00deabf0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00deac00 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ + 0x00deac10 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00deac20 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00deac30 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ + 0x00deac40 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ + 0x00deac50 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ + 0x00deac60 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ + 0x00deac70 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ + 0x00deac80 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ + 0x00deac90 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ + 0x00deaca0 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ + 0x00deacb0 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ + 0x00deacc0 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ + 0x00deacd0 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ + 0x00deace0 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ + 0x00deacf0 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ + 0x00dead00 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ + 0x00dead10 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ + 0x00dead20 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00dead30 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dead40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dead50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dead60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dead70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dead80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dead90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00deada0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00deadb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00deadc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00deadd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00deade0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00deadf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00deae00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00deae10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00deae20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00deae30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00deae40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00deae50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00deae60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00deae70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00deae80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00deae90 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00deaea0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00deaeb0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00deaec0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00deaed0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00deaee0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00deaef0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00deaf00 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00deaf10 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00deaf20 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00deaf30 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00deaf40 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00deaf50 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ + 0x00deaf60 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ + 0x00deaf70 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ + 0x00deaf80 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00deaf90 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ + 0x00deafa0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00deafb0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00deafc0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00deafd0 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ + 0x00deafe0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00deaff0 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ + 0x00deb000 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00deb010 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ + 0x00deb020 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00deb030 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ + 0x00deb040 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ + 0x00deb050 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ + 0x00deb060 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ + 0x00deb070 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ + 0x00deb080 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00deb090 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ + 0x00deb0a0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00deb0b0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00deb0c0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00deb0d0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00deb0e0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00deb0f0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00deb100 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00deb110 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00deb120 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00deb130 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00deb140 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00deb150 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00deb160 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00deb170 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00deb180 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00deb190 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00deb1a0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00deb1b0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00deb1c0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00deb1d0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00deb1e0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00deb1f0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00deb200 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00deb210 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00deb220 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00deb230 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00deb240 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00deb250 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00deb260 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00deb270 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00deb280 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00deb290 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00deb2a0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00deb2b0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00deb2c0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00deb2d0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00deb2e0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00deb2f0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00deb300 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00deb310 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00deb320 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00deb330 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00deb340 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00deb350 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00deb360 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00deb370 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00deb380 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00deb390 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00deb3a0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00deb3b0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00deb3c0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00deb3d0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00deb3e0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00deb3f0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00deb400 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00deb410 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00deb420 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00deb430 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00deb440 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00deb450 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00deb460 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00deb470 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00deb480 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00deb490 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00deb4a0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00deb4b0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00deb4c0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00deb4d0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00deb4e0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00deb4f0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00deb500 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00deb510 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00deb520 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00deb530 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00deb540 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00deb550 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00deb560 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00deb570 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00deb580 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00deb590 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00deb5a0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00deb5b0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00deb5c0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00deb5d0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00deb5e0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00deb5f0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00deb600 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00deb610 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00deb620 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00deb630 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00deb640 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00deb650 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00deb660 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00deb670 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00deb680 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00deb690 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ + 0x00deb6a0 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ + 0x00deb6b0 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ + 0x00deb6c0 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ + 0x00deb6d0 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ + 0x00deb6e0 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ + 0x00deb6f0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00deb700 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ + 0x00deb710 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00deb720 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00deb730 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ + 0x00deb740 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ + 0x00deb750 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00deb760 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00deb770 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00deb780 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ + 0x00deb790 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ + 0x00deb7a0 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ + 0x00deb7b0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00deb7c0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00deb7d0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00deb7e0 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00deb7f0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00deb800 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00deb810 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00deb820 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00deb830 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00deb840 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00deb850 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00deb860 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00deb870 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00deb880 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00deb890 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00deb8a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00deb8b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00deb8c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00deb8d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00deb8e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00deb8f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00deb900 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00deb910 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00deb920 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00deb930 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00deb940 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00deb950 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00deb960 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00deb970 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00deb980 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00deb990 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00deb9a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00deb9b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00deb9c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00deb9d0 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ + 0x00deb9e0 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ + 0x00deb9f0 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ + 0x00deba00 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00deba10 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00deba20 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00deba30 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00deba40 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00deba50 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00deba60 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00deba70 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00deba80 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00deba90 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00debaa0 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ + 0x00debab0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00debac0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00debad0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00debae0 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ + 0x00debaf0 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ + 0x00debb00 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ + 0x00debb10 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ + 0x00debb20 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ + 0x00debb30 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00debb40 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00debb50 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00debb60 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00debb70 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00debb80 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00debb90 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00debba0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00debbb0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00debbc0 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00debbd0 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00debbe0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00debbf0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00debc00 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00debc10 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00debc20 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00debc30 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00debc40 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00debc50 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00debc60 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00debc70 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00debc80 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00debc90 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00debca0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00debcb0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00debcc0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00debcd0 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00debce0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00debcf0 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00debd00 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00debd10 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00debd20 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00debd30 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00debd40 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00debd50 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00debd60 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00debd70 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00debd80 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00debd90 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00debda0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00debdb0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00debdc0 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00debdd0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00debde0 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00debdf0 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00debe00 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00debe10 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00debe20 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00debe30 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00debe40 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00debe50 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00debe60 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00debe70 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00debe80 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00debe90 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00debea0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00debeb0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00debec0 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00debed0 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00debee0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00debef0 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00debf00 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00debf10 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00debf20 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00debf30 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00debf40 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00debf50 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00debf60 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00debf70 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00debf80 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00debf90 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00debfa0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00debfb0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00debfc0 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00debfd0 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00debfe0 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00debff0 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00dec000 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00dec010 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00dec020 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00dec030 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00dec040 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00dec050 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00dec060 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00dec070 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00dec080 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00dec090 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00dec0a0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00dec0b0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00dec0c0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00dec0d0 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ + 0x00dec0e0 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ + 0x00dec0f0 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ + 0x00dec100 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00dec110 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ + 0x00dec120 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ + 0x00dec130 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ + 0x00dec140 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ + 0x00dec150 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ + 0x00dec160 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ + 0x00dec170 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00dec180 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ + 0x00dec190 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ + 0x00dec1a0 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00dec1b0 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00dec1c0 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ + 0x00dec1d0 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ + 0x00dec1e0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00dec1f0 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00dec200 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dec210 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dec220 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dec230 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dec240 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dec250 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dec260 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dec270 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dec280 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dec290 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dec2a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dec2b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dec2c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dec2d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dec2e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dec2f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dec300 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dec310 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dec320 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dec330 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dec340 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dec350 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00dec360 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00dec370 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00dec380 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00dec390 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00dec3a0 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00dec3b0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00dec3c0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00dec3d0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00dec3e0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00dec3f0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00dec400 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00dec410 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00dec420 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00dec430 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00dec440 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00dec450 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00dec460 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00dec470 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00dec480 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00dec490 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00dec4a0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00dec4b0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00dec4c0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00dec4d0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00dec4e0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00dec4f0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00dec500 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00dec510 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00dec520 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00dec530 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00dec540 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ + 0x00dec550 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ + 0x00dec560 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00dec570 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ + 0x00dec580 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ + 0x00dec590 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ + 0x00dec5a0 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ + 0x00dec5b0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00dec5c0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00dec5d0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00dec5e0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00dec5f0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00dec600 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00dec610 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00dec620 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00dec630 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00dec640 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00dec650 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00dec660 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00dec670 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00dec680 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00dec690 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00dec6a0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00dec6b0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00dec6c0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00dec6d0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00dec6e0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00dec6f0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00dec700 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00dec710 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00dec720 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00dec730 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00dec740 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00dec750 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00dec760 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00dec770 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dec780 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00dec790 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00dec7a0 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00dec7b0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00dec7c0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00dec7d0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00dec7e0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00dec7f0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00dec800 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00dec810 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00dec820 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00dec830 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00dec840 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00dec850 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00dec860 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00dec870 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00dec880 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00dec890 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00dec8a0 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00dec8b0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00dec8c0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00dec8d0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00dec8e0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00dec8f0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00dec900 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00dec910 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00dec920 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00dec930 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00dec940 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00dec950 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00dec960 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00dec970 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00dec980 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00dec990 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00dec9a0 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00dec9b0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00dec9c0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00dec9d0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00dec9e0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00dec9f0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00deca00 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00deca10 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00deca20 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00deca30 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00deca40 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00deca50 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00deca60 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00deca70 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00deca80 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00deca90 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00decaa0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00decab0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00decac0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00decad0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00decae0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00decaf0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00decb00 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00decb10 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00decb20 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00decb30 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00decb40 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ + 0x00decb50 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ + 0x00decb60 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ + 0x00decb70 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ + 0x00decb80 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ + 0x00decb90 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ + 0x00decba0 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ + 0x00decbb0 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ + 0x00decbc0 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ + 0x00decbd0 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ + 0x00decbe0 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ + 0x00decbf0 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ + 0x00decc00 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ + 0x00decc10 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ + 0x00decc20 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ + 0x00decc30 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ + 0x00decc40 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ + 0x00decc50 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ + 0x00decc60 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ + 0x00decc70 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00decc80 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00decc90 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ + 0x00decca0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00deccb0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00deccc0 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ + 0x00deccd0 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ + 0x00decce0 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ + 0x00deccf0 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ + 0x00decd00 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ + 0x00decd10 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ + 0x00decd20 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00decd30 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ + 0x00decd40 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00decd50 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ + 0x00decd60 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ + 0x00decd70 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ + 0x00decd80 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ + 0x00decd90 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ + 0x00decda0 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ + 0x00decdb0 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ + 0x00decdc0 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ + 0x00decdd0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00decde0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00decdf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dece00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dece10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dece20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dece30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dece40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dece50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dece60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dece70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dece80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dece90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00decea0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00deceb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00decec0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00deced0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00decee0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00decef0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00decf00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00decf10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00decf20 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00decf30 726d204d 45444955 4d5f5020 73616d70 rm MEDIUM_P samp │ │ │ │ + 0x00decf40 6c657232 44417272 61792075 5f636f6c ler2DArray u_col │ │ │ │ + 0x00decf50 6f725465 783b200a 2020696e 20766563 orTex; . in vec │ │ │ │ + 0x00decf60 3320765f 74657843 6f6f7264 733b200a 3 v_texCoords; . │ │ │ │ + 0x00decf70 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00decf80 67436f6c 6f723b20 0a202063 6f6e7374 gColor; . const │ │ │ │ + 0x00decf90 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00decfa0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00decfb0 303b200a 20204c4f 575f5020 76656333 0; . LOW_P vec3 │ │ │ │ + 0x00decfc0 204d6f64 756c6174 65427950 61747465 ModulateByPatte │ │ │ │ + 0x00decfd0 726e446f 7473284c 4f575f50 20766563 rnDots(LOW_P vec │ │ │ │ + 0x00decfe0 3320636f 6c6f722c 20666c6f 61742064 3 color, float d │ │ │ │ + 0x00decff0 61726b65 6e2c2066 6c6f6174 20636f76 arken, float cov │ │ │ │ + 0x00ded000 65726167 6529200a 20207b20 0a202020 erage) . { . │ │ │ │ + 0x00ded010 20636f6e 73742066 6c6f6174 206b4c69 const float kLi │ │ │ │ + 0x00ded020 67687465 6e203d20 302e3037 353b200a ghten = 0.075; . │ │ │ │ + 0x00ded030 20202020 69662028 646f7428 636f6c6f if (dot(colo │ │ │ │ + 0x00ded040 722c2076 65633328 302e3231 32362c20 r, vec3(0.2126, │ │ │ │ + 0x00ded050 302e3731 35322c20 302e3037 32322929 0.7152, 0.0722)) │ │ │ │ + 0x00ded060 203c2030 2e352920 0a202020 20202072 < 0.5) . r │ │ │ │ + 0x00ded070 65747572 6e20636f 6c6f7220 2b20636f eturn color + co │ │ │ │ + 0x00ded080 76657261 6765202a 206b4c69 67687465 verage * kLighte │ │ │ │ + 0x00ded090 6e3b200a 20202020 72657475 726e2063 n; . return c │ │ │ │ + 0x00ded0a0 6f6c6f72 202a206d 69782831 2e302c20 olor * mix(1.0, │ │ │ │ + 0x00ded0b0 6461726b 656e2c20 636f7665 72616765 darken, coverage │ │ │ │ + 0x00ded0c0 293b200a 20207d20 0a202076 6f696420 ); . } . void │ │ │ │ + 0x00ded0d0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00ded0e0 20765f46 72616743 6f6c6f72 203d2074 v_FragColor = t │ │ │ │ + 0x00ded0f0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00ded100 782c2076 5f746578 436f6f72 6473293b x, v_texCoords); │ │ │ │ + 0x00ded110 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00ded120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ded130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ded140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ded150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ded160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ded170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ded180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ded190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ded1a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ded1b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ded1c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ded1d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ded1e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ded1f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ded200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ded210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ded220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ded230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ded240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ded250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ded260 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00ded270 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00ded280 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00ded290 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00ded2a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00ded2b0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00ded2c0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00ded2d0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00ded2e0 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00ded2f0 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00ded300 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00ded310 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00ded320 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00ded330 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00ded340 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00ded350 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00ded360 206d6174 3420755f 7069766f 74547261 mat4 u_pivotTra │ │ │ │ + 0x00ded370 6e73666f 726d3b20 0a202075 6e69666f nsform; . unifo │ │ │ │ + 0x00ded380 726d2076 65633220 755f636f 6e747261 rm vec2 u_contra │ │ │ │ + 0x00ded390 73744761 6d6d613b 200a2020 756e6966 stGamma; . unif │ │ │ │ + 0x00ded3a0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00ded3b0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00ded3c0 666c6f61 7420755f 7a536361 6c653b20 float u_zScale; │ │ │ │ + 0x00ded3d0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00ded3e0 20755f69 6e746572 706f6c61 74696f6e u_interpolation │ │ │ │ + 0x00ded3f0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00ded400 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00ded410 73733b20 0a202075 6e69666f 726d2073 ss; . uniform s │ │ │ │ + 0x00ded420 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00ded430 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00ded440 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00ded450 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00ded460 20204c4f 575f5020 76656333 204d6f64 LOW_P vec3 Mod │ │ │ │ + 0x00ded470 756c6174 65427950 61747465 726e446f ulateByPatternDo │ │ │ │ + 0x00ded480 7473284c 4f575f50 20766563 3320636f ts(LOW_P vec3 co │ │ │ │ + 0x00ded490 6c6f722c 20666c6f 61742064 61726b65 lor, float darke │ │ │ │ + 0x00ded4a0 6e2c2066 6c6f6174 20636f76 65726167 n, float coverag │ │ │ │ + 0x00ded4b0 6529200a 20207b20 0a202020 20636f6e e) . { . con │ │ │ │ + 0x00ded4c0 73742066 6c6f6174 206b4c69 67687465 st float kLighte │ │ │ │ + 0x00ded4d0 6e203d20 302e3037 353b200a 20202020 n = 0.075; . │ │ │ │ + 0x00ded4e0 69662028 646f7428 636f6c6f 722c2076 if (dot(color, v │ │ │ │ + 0x00ded4f0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00ded500 35322c20 302e3037 32322929 203c2030 52, 0.0722)) < 0 │ │ │ │ + 0x00ded510 2e352920 0a202020 20202072 65747572 .5) . retur │ │ │ │ + 0x00ded520 6e20636f 6c6f7220 2b20636f 76657261 n color + covera │ │ │ │ + 0x00ded530 6765202a 206b4c69 67687465 6e3b200a ge * kLighten; . │ │ │ │ + 0x00ded540 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00ded550 202a206d 69782831 2e302c20 6461726b * mix(1.0, dark │ │ │ │ + 0x00ded560 656e2c20 636f7665 72616765 293b200a en, coverage); . │ │ │ │ + 0x00ded570 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00ded580 2829200a 20207b20 0a202023 69666465 () . { . #ifde │ │ │ │ + 0x00ded590 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00ded5a0 20204c4f 575f5020 76656334 20676c79 LOW_P vec4 gly │ │ │ │ + 0x00ded5b0 7068436f 6c6f7220 3d20765f 636f6c6f phColor = v_colo │ │ │ │ + 0x00ded5c0 723b200a 20202365 6c736520 0a202020 r; . #else . │ │ │ │ + 0x00ded5d0 204c4f57 5f502076 65633420 676c7970 LOW_P vec4 glyp │ │ │ │ + 0x00ded5e0 68436f6c 6f72203d 20746578 74757265 hColor = texture │ │ │ │ + 0x00ded5f0 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ + 0x00ded600 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ + 0x00ded610 20202365 6e646966 200a2020 2020666c #endif . fl │ │ │ │ + 0x00ded620 6f617420 64697374 203d2074 65787475 oat dist = textu │ │ │ │ + 0x00ded630 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ + 0x00ded640 6d61736b 54657843 6f6f7264 292e723b maskTexCoord).r; │ │ │ │ + 0x00ded650 200a2020 2020666c 6f617420 616c7068 . float alph │ │ │ │ + 0x00ded660 61203d20 736d6f6f 74687374 65702875 a = smoothstep(u │ │ │ │ + 0x00ded670 5f636f6e 74726173 7447616d 6d612e78 _contrastGamma.x │ │ │ │ + 0x00ded680 202d2075 5f636f6e 74726173 7447616d - u_contrastGam │ │ │ │ + 0x00ded690 6d612e79 2c20755f 636f6e74 72617374 ma.y, u_contrast │ │ │ │ + 0x00ded6a0 47616d6d 612e7820 2b20755f 636f6e74 Gamma.x + u_cont │ │ │ │ + 0x00ded6b0 72617374 47616d6d 612e792c 20646973 rastGamma.y, dis │ │ │ │ + 0x00ded6c0 7429202a 20755f6f 70616369 74793b20 t) * u_opacity; │ │ │ │ + 0x00ded6d0 0a202020 20676c79 7068436f 6c6f722e . glyphColor. │ │ │ │ + 0x00ded6e0 61202a3d 20616c70 68613b20 0a202020 a *= alpha; . │ │ │ │ + 0x00ded6f0 20765f46 72616743 6f6c6f72 203d2067 v_FragColor = g │ │ │ │ + 0x00ded700 6c797068 436f6c6f 723b200a 20207d20 lyphColor; . } │ │ │ │ + 0x00ded710 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00ded720 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ded730 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ded740 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ded750 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ded760 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ded770 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ded780 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ded790 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ded7a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ded7b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ded7c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ded7d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ded7e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ded7f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ded800 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ded810 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ded820 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ded830 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ded840 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ded850 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ded860 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ded870 63342076 5f746578 436f6f72 64733b20 c4 v_texCoords; │ │ │ │ + 0x00ded880 0a202069 6e207665 63342076 5f6d6173 . in vec4 v_mas │ │ │ │ + 0x00ded890 6b436f6c 6f723b20 0a20206f 75742076 kColor; . out v │ │ │ │ + 0x00ded8a0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00ded8b0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00ded8c0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00ded8d0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00ded8e0 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00ded8f0 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00ded900 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00ded910 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00ded920 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00ded930 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00ded940 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00ded950 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00ded960 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00ded970 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00ded980 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00ded990 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00ded9a0 6c696e65 50617373 3b200a20 20756e69 linePass; . uni │ │ │ │ + 0x00ded9b0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00ded9c0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00ded9d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00ded9e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00ded9f0 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ + 0x00deda00 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ + 0x00deda10 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ + 0x00deda20 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ + 0x00deda30 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ + 0x00deda40 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ + 0x00deda50 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ + 0x00deda60 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ + 0x00deda70 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ + 0x00deda80 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ + 0x00deda90 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ + 0x00dedaa0 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ + 0x00dedab0 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ + 0x00dedac0 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ + 0x00dedad0 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ + 0x00dedae0 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ + 0x00dedaf0 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ + 0x00dedb00 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ + 0x00dedb10 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00dedb20 20202020 76656334 20636f6c 6f72203d vec4 color = │ │ │ │ + 0x00dedb30 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00dedb40 5465782c 20765f74 6578436f 6f726473 Tex, v_texCoords │ │ │ │ + 0x00dedb50 2e787929 3b200a20 20202076 65633420 .xy); . vec4 │ │ │ │ + 0x00dedb60 6267436f 6c6f7220 3d207465 78747572 bgColor = textur │ │ │ │ + 0x00dedb70 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00dedb80 74657843 6f6f7264 732e7a77 29202a20 texCoords.zw) * │ │ │ │ + 0x00dedb90 76656334 28765f6d 61736b43 6f6c6f72 vec4(v_maskColor │ │ │ │ + 0x00dedba0 2e78797a 2c20312e 30293b20 0a202020 .xyz, 1.0); . │ │ │ │ + 0x00dedbb0 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ + 0x00dedbc0 203d206d 69782863 6f6c6f72 2c206d69 = mix(color, mi │ │ │ │ + 0x00dedbd0 78286267 436f6c6f 722c2063 6f6c6f72 x(bgColor, color │ │ │ │ + 0x00dedbe0 2c20636f 6c6f722e 61292c20 6267436f , color.a), bgCo │ │ │ │ + 0x00dedbf0 6c6f722e 61293b20 0a202020 2066696e lor.a); . fin │ │ │ │ + 0x00dedc00 616c436f 6c6f722e 61203d20 636c616d alColor.a = clam │ │ │ │ + 0x00dedc10 7028636f 6c6f722e 61202b20 6267436f p(color.a + bgCo │ │ │ │ + 0x00dedc20 6c6f722e 612c2030 2e302c20 312e3029 lor.a, 0.0, 1.0) │ │ │ │ + 0x00dedc30 202a2075 5f6f7061 63697479 202a2076 * u_opacity * v │ │ │ │ + 0x00dedc40 5f6d6173 6b436f6c 6f722e77 3b200a20 _maskColor.w; . │ │ │ │ + 0x00dedc50 20202069 66202866 696e616c 436f6c6f if (finalColo │ │ │ │ + 0x00dedc60 722e6120 3c20302e 30312920 0a202020 r.a < 0.01) . │ │ │ │ + 0x00dedc70 20202064 69736361 72643b20 0a202020 discard; . │ │ │ │ + 0x00dedc80 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ + 0x00dedc90 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ + 0x00dedca0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dedcb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dedcc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dedcd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dedce0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dedcf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dedd00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dedd10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dedd20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dedd30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dedd40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dedd50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dedd60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dedd70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dedd80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dedd90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dedda0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00deddb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00deddc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00deddd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dedde0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00deddf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dede00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dede10 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00dede20 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00dede30 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00dede40 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00dede50 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00dede60 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00dede70 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00dede80 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00dede90 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00dedea0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00dedeb0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00dedec0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00deded0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00dedee0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00dedef0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dedf00 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00dedf10 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00dedf20 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00dedf30 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00dedf40 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00dedf50 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00dedf60 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00dedf70 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00dedf80 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00dedf90 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00dedfa0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00dedfb0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00dedfc0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00dedfd0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00dedfe0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00dedff0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dee000 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00dee010 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00dee020 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00dee030 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dee040 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00dee050 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00dee060 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00dee070 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00dee080 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00dee090 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dee0a0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00dee0b0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00dee0c0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00dee0d0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00dee0e0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00dee0f0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00dee100 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dee110 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00dee120 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00dee130 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dee140 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00dee150 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00dee160 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dee170 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00dee180 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00dee190 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00dee1a0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00dee1b0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00dee1c0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00dee1d0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00dee1e0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00dee1f0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00dee200 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00dee210 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00dee220 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00dee230 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00dee240 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00dee250 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00dee260 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00dee270 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00dee280 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00dee290 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00dee2a0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00dee2b0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00dee2c0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00dee2d0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00dee2e0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00dee2f0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00dee300 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00dee310 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00dee320 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00dee330 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00dee340 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00dee350 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00dee360 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00dee370 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00dee380 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00dee390 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00dee3a0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00dee3b0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00dee3c0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00dee3d0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00dee3e0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00dee3f0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00dee400 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00dee410 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00dee420 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00dee430 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00dee440 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00dee450 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00dee460 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00dee470 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00dee480 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00dee490 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00dee4a0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00dee4b0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00dee4c0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00dee4d0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00dee4e0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00dee4f0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00dee500 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00dee510 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00dee520 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00dee530 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00dee540 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ + 0x00dee550 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ + 0x00dee560 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ + 0x00dee570 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ + 0x00dee580 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ + 0x00dee590 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ + 0x00dee5a0 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ + 0x00dee5b0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00dee5c0 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ + 0x00dee5d0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00dee5e0 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ + 0x00dee5f0 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ + 0x00dee600 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ + 0x00dee610 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ + 0x00dee620 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ + 0x00dee630 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ + 0x00dee640 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ + 0x00dee650 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00dee660 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00dee670 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ + 0x00dee680 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ + 0x00dee690 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00dee6a0 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ + 0x00dee6b0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00dee6c0 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ + 0x00dee6d0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00dee6e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dee6f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dee700 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dee710 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dee720 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dee730 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dee740 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dee750 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dee760 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dee770 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dee780 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dee790 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dee7a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dee7b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dee7c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dee7d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dee7e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dee7f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dee800 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dee810 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dee820 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dee830 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00dee840 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00dee850 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00dee860 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00dee870 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ + 0x00dee880 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00dee890 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00dee8a0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00dee8b0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00dee8c0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00dee8d0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00dee8e0 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ + 0x00dee8f0 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ + 0x00dee900 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ + 0x00dee910 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ + 0x00dee920 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ + 0x00dee930 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ + 0x00dee940 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00dee950 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00dee960 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ + 0x00dee970 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00dee980 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00dee990 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00dee9a0 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ + 0x00dee9b0 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ + 0x00dee9c0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00dee9d0 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ + 0x00dee9e0 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ + 0x00dee9f0 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ + 0x00deea00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00deea10 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ + 0x00deea20 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ + 0x00deea30 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00deea40 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ + 0x00deea50 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ + 0x00deea60 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ + 0x00deea70 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00deea80 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ + 0x00deea90 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00deeaa0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00deeab0 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ + 0x00deeac0 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ + 0x00deead0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00deeae0 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ + 0x00deeaf0 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ + 0x00deeb00 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ + 0x00deeb10 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00deeb20 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ + 0x00deeb30 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ + 0x00deeb40 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ + 0x00deeb50 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ + 0x00deeb60 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00deeb70 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00deeb80 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00deeb90 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ + 0x00deeba0 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ + 0x00deebb0 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ + 0x00deebc0 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ + 0x00deebd0 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ + 0x00deebe0 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ + 0x00deebf0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00deec00 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ + 0x00deec10 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ + 0x00deec20 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ + 0x00deec30 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ + 0x00deec40 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ + 0x00deec50 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ + 0x00deec60 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ + 0x00deec70 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ + 0x00deec80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00deec90 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ + 0x00deeca0 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ + 0x00deecb0 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ + 0x00deecc0 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ + 0x00deecd0 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ + 0x00deece0 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ + 0x00deecf0 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ + 0x00deed00 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ + 0x00deed10 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ + 0x00deed20 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ + 0x00deed30 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ + 0x00deed40 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00deed50 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ + 0x00deed60 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ + 0x00deed70 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ + 0x00deed80 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00deed90 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ + 0x00deeda0 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ + 0x00deedb0 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ + 0x00deedc0 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ + 0x00deedd0 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ + 0x00deede0 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ + 0x00deedf0 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ + 0x00deee00 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ + 0x00deee10 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ + 0x00deee20 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ + 0x00deee30 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ + 0x00deee40 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ + 0x00deee50 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ + 0x00deee60 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00deee70 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ + 0x00deee80 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ + 0x00deee90 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ + 0x00deeea0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00deeeb0 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ + 0x00deeec0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00deeed0 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ + 0x00deeee0 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ + 0x00deeef0 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00deef00 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00deef10 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00deef20 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00deef30 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00deef40 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ + 0x00deef50 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ + 0x00deef60 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00deef70 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00deef80 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ + 0x00deef90 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ + 0x00deefa0 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ + 0x00deefb0 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ + 0x00deefc0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00deefd0 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ + 0x00deefe0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00deeff0 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ + 0x00def000 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00def010 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00def020 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00def030 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ + 0x00def040 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ + 0x00def050 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ + 0x00def060 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00def070 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00def080 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ + 0x00def090 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00def0a0 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ + 0x00def0b0 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ + 0x00def0c0 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ + 0x00def0d0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00def0e0 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ + 0x00def0f0 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ + 0x00def100 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00def110 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00def120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00def130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00def140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00def150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00def160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00def170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00def180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00def190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00def1a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00def1b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00def1c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00def1d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00def1e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00def1f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00def200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00def210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00def220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00def230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00def240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00def250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00def260 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00def270 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00def280 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00def290 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00def2a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00def2b0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00def2c0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00def2d0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00def2e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00def2f0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00def300 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00def310 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00def320 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00def330 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00def340 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00def350 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00def360 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00def370 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00def380 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00def390 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00def3a0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00def3b0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00def3c0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00def3d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00def3e0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00def3f0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00def400 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00def410 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00def420 6c6f6174 206b4365 6c6c5078 203d2031 loat kCellPx = 1 │ │ │ │ + 0x00def430 362e303b 20202020 2f2f206f 6e652064 6.0; // one d │ │ │ │ + 0x00def440 6f742070 65722074 696c6520 2d3e2073 ot per tile -> s │ │ │ │ + 0x00def450 70617273 652c2072 6567756c 61722072 parse, regular r │ │ │ │ + 0x00def460 6f777320 0a202063 6f6e7374 20666c6f ows . const flo │ │ │ │ + 0x00def470 6174206b 52616469 75735078 203d2031 at kRadiusPx = 1 │ │ │ │ + 0x00def480 2e363b20 0a202063 6f6e7374 20666c6f .6; . const flo │ │ │ │ + 0x00def490 6174206b 4461726b 656e203d 20302e38 at kDarken = 0.8 │ │ │ │ + 0x00def4a0 323b2020 20202f2f 20737562 746c6520 2; // subtle │ │ │ │ + 0x00def4b0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00def4c0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00def4d0 203d2031 3030302e 303b200a 20204c4f = 1000.0; . LO │ │ │ │ + 0x00def4e0 575f5020 76656333 204d6f64 756c6174 W_P vec3 Modulat │ │ │ │ + 0x00def4f0 65427950 61747465 726e446f 7473284c eByPatternDots(L │ │ │ │ + 0x00def500 4f575f50 20766563 3320636f 6c6f722c OW_P vec3 color, │ │ │ │ + 0x00def510 20666c6f 61742064 61726b65 6e2c2066 float darken, f │ │ │ │ + 0x00def520 6c6f6174 20636f76 65726167 6529200a loat coverage) . │ │ │ │ + 0x00def530 20207b20 0a202020 20636f6e 73742066 { . const f │ │ │ │ + 0x00def540 6c6f6174 206b4c69 67687465 6e203d20 loat kLighten = │ │ │ │ + 0x00def550 302e3037 353b200a 20202020 69662028 0.075; . if ( │ │ │ │ + 0x00def560 646f7428 636f6c6f 722c2076 65633328 dot(color, vec3( │ │ │ │ + 0x00def570 302e3231 32362c20 302e3731 35322c20 0.2126, 0.7152, │ │ │ │ + 0x00def580 302e3037 32322929 203c2030 2e352920 0.0722)) < 0.5) │ │ │ │ + 0x00def590 0a202020 20202072 65747572 6e20636f . return co │ │ │ │ + 0x00def5a0 6c6f7220 2b20636f 76657261 6765202a lor + coverage * │ │ │ │ + 0x00def5b0 206b4c69 67687465 6e3b200a 20202020 kLighten; . │ │ │ │ + 0x00def5c0 72657475 726e2063 6f6c6f72 202a206d return color * m │ │ │ │ + 0x00def5d0 69782831 2e302c20 6461726b 656e2c20 ix(1.0, darken, │ │ │ │ + 0x00def5e0 636f7665 72616765 293b200a 20207d20 coverage); . } │ │ │ │ + 0x00def5f0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00def600 20207b20 0a202023 69666465 6620454e { . #ifdef EN │ │ │ │ + 0x00def610 41424c45 5f565446 200a2020 20204c4f ABLE_VTF . LO │ │ │ │ + 0x00def620 575f5020 76656334 20636f6c 6f72203d W_P vec4 color = │ │ │ │ + 0x00def630 20765f63 6f6c6f72 3b200a20 2023656c v_color; . #el │ │ │ │ + 0x00def640 7365200a 20202020 4c4f575f 50207665 se . LOW_P ve │ │ │ │ + 0x00def650 63342063 6f6c6f72 203d2074 65787475 c4 color = textu │ │ │ │ + 0x00def660 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00def670 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ + 0x00def680 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00def690 20766563 32207078 203d2076 5f6d6173 vec2 px = v_mas │ │ │ │ + 0x00def6a0 6b546578 436f6f72 6473202a 2031362e kTexCoords * 16. │ │ │ │ + 0x00def6b0 303b200a 20202020 76656332 20746f43 0; . vec2 toC │ │ │ │ + 0x00def6c0 656e7465 72203d20 28667261 63742870 enter = (fract(p │ │ │ │ + 0x00def6d0 78202f20 6b43656c 6c507829 202d2030 x / kCellPx) - 0 │ │ │ │ + 0x00def6e0 2e352920 2a206b43 656c6c50 783b2020 .5) * kCellPx; │ │ │ │ + 0x00def6f0 2f2f2072 6567756c 6172206c 61747469 // regular latti │ │ │ │ + 0x00def700 63652c20 6e6f206a 69747465 72200a20 ce, no jitter . │ │ │ │ + 0x00def710 20202066 6c6f6174 2064203d 206c656e float d = len │ │ │ │ + 0x00def720 67746828 746f4365 6e746572 293b200a gth(toCenter); . │ │ │ │ + 0x00def730 20202020 666c6f61 74206161 203d206d float aa = m │ │ │ │ + 0x00def740 61782866 77696474 68287078 2e78292c ax(fwidth(px.x), │ │ │ │ + 0x00def750 20667769 64746828 70782e79 29293b20 fwidth(px.y)); │ │ │ │ + 0x00def760 0a202020 20666c6f 61742063 6f766572 . float cover │ │ │ │ + 0x00def770 61676520 3d20312e 30202d20 736d6f6f age = 1.0 - smoo │ │ │ │ + 0x00def780 74687374 6570286b 52616469 75735078 thstep(kRadiusPx │ │ │ │ + 0x00def790 202d2061 612c206b 52616469 75735078 - aa, kRadiusPx │ │ │ │ + 0x00def7a0 202b2061 612c2064 293b200a 20202020 + aa, d); . │ │ │ │ + 0x00def7b0 636f6c6f 722e7267 62203d20 4d6f6475 color.rgb = Modu │ │ │ │ + 0x00def7c0 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ + 0x00def7d0 7328636f 6c6f722e 7267622c 206b4461 s(color.rgb, kDa │ │ │ │ + 0x00def7e0 726b656e 2c20636f 76657261 6765293b rken, coverage); │ │ │ │ + 0x00def7f0 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ + 0x00def800 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00def810 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ + 0x00def820 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00def830 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00def840 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00def850 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00def860 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00def870 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00def880 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00def890 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00def8a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00def8b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00def8c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00def8d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00def8e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00def8f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00def900 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00def910 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00def920 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00def930 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00def940 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00def950 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00def960 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00def970 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00def980 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00def990 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00def9a0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00def9b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00def9c0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00def9d0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00def9e0 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ + 0x00def9f0 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ + 0x00defa00 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ + 0x00defa10 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00defa20 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00defa30 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ + 0x00defa40 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ + 0x00defa50 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00defa60 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00defa70 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00defa80 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00defa90 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00defaa0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00defab0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00defac0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00defad0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00defae0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00defaf0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00defb00 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00defb10 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00defb20 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00defb30 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00defb40 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00defb50 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00defb60 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00defb70 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00defb80 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00defb90 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00defba0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00defbb0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00defbc0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00defbd0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00defbe0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00defbf0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00defc00 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00defc10 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00defc20 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00defc30 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00defc40 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00defc50 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00defc60 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00defc70 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00defc80 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00defc90 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00defca0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00defcb0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00defcc0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00defcd0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00defce0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00defcf0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00defd00 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00defd10 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00defd20 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00defd30 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00defd40 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00defd50 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00defd60 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00defd70 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00defd80 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00defd90 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00defda0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00defdb0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00defdc0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00defdd0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00defde0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00defdf0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00defe00 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00defe10 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00defe20 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00defe30 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00defe40 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00defe50 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00defe60 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00defe70 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00defe80 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00defe90 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00defea0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00defeb0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00defec0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00defed0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00defee0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00defef0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00deff00 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00deff10 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00deff20 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00deff30 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00deff40 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00deff50 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00deff60 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00deff70 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00deff80 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00deff90 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00deffa0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00deffb0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00deffc0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00deffd0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00deffe0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00defff0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00df0000 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00df0010 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00df0020 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00df0030 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00df0040 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00df0050 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00df0060 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00df0070 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00df0080 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00df0090 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00df00a0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00df00b0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00df00c0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00df00d0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00df00e0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00df00f0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00df0100 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00df0110 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00df0120 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00df0130 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00df0140 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00df0150 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00df0160 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00df0170 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ + 0x00df0180 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00df0190 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00df01a0 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ + 0x00df01b0 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ + 0x00df01c0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00df01d0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00df01e0 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00df01f0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00df0200 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00df0210 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00df0220 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00df0230 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00df0240 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00df0250 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ + 0x00df0260 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ + 0x00df0270 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00df0280 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df0290 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df02a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df02b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df02c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df02d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df02e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df02f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df0300 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df0310 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df0320 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df0330 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df0340 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df0350 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df0360 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df0370 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df0380 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df0390 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df03a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df03b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df03c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df03d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00df03e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00df03f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00df0400 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00df0410 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00df0420 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00df0430 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00df0440 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00df0450 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00df0460 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00df0470 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00df0480 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00df0490 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00df04a0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00df04b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00df04c0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00df04d0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00df04e0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00df04f0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00df0500 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00df0510 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00df0520 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00df0530 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00df0540 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00df0550 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00df0560 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00df0570 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00df0580 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00df0590 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00df05a0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00df05b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00df05c0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00df05d0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00df05e0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00df05f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00df0600 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00df0610 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00df0620 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00df0630 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00df0640 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00df0650 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df0660 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00df0670 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00df0680 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00df0690 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00df06a0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00df06b0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00df06c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00df06d0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00df06e0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00df06f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df0700 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00df0710 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00df0720 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df0730 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00df0740 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00df0750 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00df0760 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00df0770 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00df0780 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00df0790 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00df07a0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00df07b0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00df07c0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00df07d0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00df07e0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00df07f0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00df0800 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00df0810 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00df0820 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00df0830 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00df0840 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00df0850 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00df0860 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00df0870 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00df0880 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00df0890 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00df08a0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00df08b0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00df08c0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00df08d0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00df08e0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00df08f0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00df0900 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00df0910 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00df0920 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00df0930 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00df0940 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00df0950 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00df0960 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00df0970 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00df0980 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00df0990 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00df09a0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00df09b0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00df09c0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00df09d0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00df09e0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00df09f0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00df0a00 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00df0a10 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00df0a20 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00df0a30 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00df0a40 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00df0a50 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00df0a60 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00df0a70 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00df0a80 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00df0a90 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00df0aa0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00df0ab0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00df0ac0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00df0ad0 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ + 0x00df0ae0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ + 0x00df0af0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00df0b00 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00df0b10 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00df0b20 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00df0b30 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00df0b40 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00df0b50 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00df0b60 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00df0b70 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00df0b80 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00df0b90 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00df0ba0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00df0bb0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00df0bc0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00df0bd0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00df0be0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00df0bf0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00df0c00 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00df0c10 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00df0c20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df0c30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df0c40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df0c50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df0c60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df0c70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df0c80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df0c90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df0ca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df0cb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df0cc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df0cd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df0ce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df0cf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df0d00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df0d10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df0d20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df0d30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df0d40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df0d50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df0d60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df0d70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00df0d80 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00df0d90 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00df0da0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00df0db0 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00df0dc0 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00df0dd0 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00df0de0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00df0df0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00df0e00 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00df0e10 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00df0e20 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00df0e30 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00df0e40 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00df0e50 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00df0e60 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00df0e70 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00df0e80 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00df0e90 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00df0ea0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00df0eb0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00df0ec0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00df0ed0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00df0ee0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00df0ef0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00df0f00 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00df0f10 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00df0f20 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00df0f30 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00df0f40 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00df0f50 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00df0f60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00df0f70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00df0f80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00df0f90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00df0fa0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00df0fb0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00df0fc0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00df0fd0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00df0fe0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00df0ff0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00df1000 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00df1010 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00df1020 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00df1030 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00df1040 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00df1050 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00df1060 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00df1070 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00df1080 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00df1090 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00df10a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df10b0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00df10c0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00df10d0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00df10e0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00df10f0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00df1100 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00df1110 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00df1120 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00df1130 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00df1140 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00df1150 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00df1160 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00df1170 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00df1180 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00df1190 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00df11a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00df11b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00df11c0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00df11d0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00df11e0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00df11f0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00df1200 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00df1210 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00df1220 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00df1230 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00df1240 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00df1250 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00df1260 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00df1270 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00df1280 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00df1290 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00df12a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00df12b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00df12c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00df12d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00df12e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00df12f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00df1300 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00df1310 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00df1320 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00df1330 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00df1340 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00df1350 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00df1360 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00df1370 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00df1380 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00df1390 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00df13a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00df13b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00df13c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00df13d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00df13e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00df13f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00df1400 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00df1410 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00df1420 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00df1430 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00df1440 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00df1450 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00df1460 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00df1470 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00df1480 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00df1490 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00df14a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00df14b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00df14c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00df14d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00df14e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00df14f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00df1500 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00df1510 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00df1520 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00df1530 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00df1540 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00df1550 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ + 0x00df1560 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ + 0x00df1570 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ + 0x00df1580 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00df1590 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ + 0x00df15a0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00df15b0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00df15c0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00df15d0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00df15e0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00df15f0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00df1600 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ + 0x00df1610 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ + 0x00df1620 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ + 0x00df1630 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ + 0x00df1640 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ + 0x00df1650 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ + 0x00df1660 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ + 0x00df1670 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00df1680 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df1690 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df16a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df16b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df16c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df16d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df16e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df16f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df1700 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df1710 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df1720 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df1730 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df1740 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df1750 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df1760 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df1770 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df1780 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df1790 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df17a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df17b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df17c0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00df17d0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00df17e0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00df17f0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00df1800 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00df1810 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00df1820 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00df1830 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00df1840 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00df1850 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00df1860 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00df1870 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00df1880 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00df1890 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00df18a0 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00df18b0 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00df18c0 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00df18d0 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00df18e0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00df18f0 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00df1900 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00df1910 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00df1920 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00df1930 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00df1940 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00df1950 6c696e65 50617373 3b200a20 20636f6e linePass; . con │ │ │ │ + 0x00df1960 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00df1970 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00df1980 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ + 0x00df1990 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ + 0x00df19a0 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ + 0x00df19b0 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ + 0x00df19c0 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ + 0x00df19d0 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ + 0x00df19e0 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ + 0x00df19f0 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ + 0x00df1a00 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ + 0x00df1a10 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ + 0x00df1a20 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ + 0x00df1a30 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ + 0x00df1a40 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ + 0x00df1a50 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ + 0x00df1a60 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ + 0x00df1a70 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ + 0x00df1a80 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ + 0x00df1a90 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ + 0x00df1aa0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00df1ab0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00df1ac0 5446200a 20202020 4c4f575f 50207665 TF . LOW_P ve │ │ │ │ + 0x00df1ad0 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ + 0x00df1ae0 765f636f 6c6f723b 200a2020 23656c73 v_color; . #els │ │ │ │ + 0x00df1af0 65200a20 2020204c 4f575f50 20766563 e . LOW_P vec │ │ │ │ + 0x00df1b00 34206669 6e616c43 6f6c6f72 203d2074 4 finalColor = t │ │ │ │ + 0x00df1b10 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00df1b20 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00df1b30 72647329 3b200a20 2023656e 64696620 rds); . #endif │ │ │ │ + 0x00df1b40 0a202020 2066696e 616c436f 6c6f722e . finalColor. │ │ │ │ + 0x00df1b50 61202a3d 20755f6f 70616369 74793b20 a *= u_opacity; │ │ │ │ + 0x00df1b60 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00df1b70 203d2066 696e616c 436f6c6f 723b200a = finalColor; . │ │ │ │ + 0x00df1b80 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00df1b90 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df1ba0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df1bb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df1bc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df1bd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df1be0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df1bf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df1c00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df1c10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df1c20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df1c30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df1c40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df1c50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df1c60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df1c70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df1c80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df1c90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df1ca0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df1cb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df1cc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df1cd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df1ce0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df1cf0 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00df1d00 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00df1d10 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00df1d20 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00df1d30 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00df1d40 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00df1d50 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00df1d60 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00df1d70 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00df1d80 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00df1d90 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00df1da0 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00df1db0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00df1dc0 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00df1dd0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00df1de0 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00df1df0 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00df1e00 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00df1e10 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00df1e20 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00df1e30 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00df1e40 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00df1e50 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00df1e60 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00df1e70 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00df1e80 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00df1e90 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00df1ea0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00df1eb0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00df1ec0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00df1ed0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00df1ee0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00df1ef0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df1f00 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00df1f10 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00df1f20 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00df1f30 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00df1f40 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00df1f50 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00df1f60 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00df1f70 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00df1f80 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00df1f90 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00df1fa0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00df1fb0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00df1fc0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df1fd0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00df1fe0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00df1ff0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df2000 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00df2010 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00df2020 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00df2030 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00df2040 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00df2050 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00df2060 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00df2070 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00df2080 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00df2090 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00df20a0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00df20b0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00df20c0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00df20d0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00df20e0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00df20f0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00df2100 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00df2110 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00df2120 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00df2130 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00df2140 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00df2150 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00df2160 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00df2170 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00df2180 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00df2190 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00df21a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df21b0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00df21c0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00df21d0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00df21e0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00df21f0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00df2200 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00df2210 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00df2220 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00df2230 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00df2240 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00df2250 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00df2260 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00df2270 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00df2280 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00df2290 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00df22a0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00df22b0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00df22c0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00df22d0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00df22e0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00df22f0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00df2300 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00df2310 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00df2320 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00df2330 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00df2340 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00df2350 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00df2360 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00df2370 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00df2380 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00df2390 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00df23a0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00df23b0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00df23c0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00df23d0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00df23e0 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ + 0x00df23f0 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ + 0x00df2400 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ + 0x00df2410 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ + 0x00df2420 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ + 0x00df2430 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ + 0x00df2440 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ + 0x00df2450 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ + 0x00df2460 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ + 0x00df2470 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ + 0x00df2480 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ + 0x00df2490 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ + 0x00df24a0 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ + 0x00df24b0 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ + 0x00df24c0 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ + 0x00df24d0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00df24e0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00df24f0 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ + 0x00df2500 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ + 0x00df2510 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ + 0x00df2520 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ + 0x00df2530 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ + 0x00df2540 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ + 0x00df2550 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00df2560 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ + 0x00df2570 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ + 0x00df2580 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00df2590 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00df25a0 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ + 0x00df25b0 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ + 0x00df25c0 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00df25d0 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00df25e0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00df25f0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00df2600 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00df2610 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df2620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df2630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df2640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df2650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df2660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df2670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df2680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df2690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df26a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df26b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df26c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df26d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df26e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df26f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df2700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df2710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df2720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df2730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df2740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df2750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df2760 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df2770 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00df2780 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00df2790 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ + 0x00df27a0 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ + 0x00df27b0 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ + 0x00df27c0 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ + 0x00df27d0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00df27e0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00df27f0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00df2800 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00df2810 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ + 0x00df2820 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ + 0x00df2830 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ + 0x00df2840 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ + 0x00df2850 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ + 0x00df2860 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00df2870 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ + 0x00df2880 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ + 0x00df2890 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ + 0x00df28a0 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ + 0x00df28b0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00df28c0 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ + 0x00df28d0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00df28e0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00df28f0 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ + 0x00df2900 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ + 0x00df2910 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ + 0x00df2920 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ + 0x00df2930 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ + 0x00df2940 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ + 0x00df2950 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ + 0x00df2960 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ + 0x00df2970 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ + 0x00df2980 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ + 0x00df2990 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ + 0x00df29a0 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ + 0x00df29b0 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00df29c0 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ + 0x00df29d0 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ + 0x00df29e0 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ + 0x00df29f0 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ + 0x00df2a00 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ + 0x00df2a10 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00df2a20 200a2020 2020666c 6f617420 4c203d20 . float L = │ │ │ │ + 0x00df2a30 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ + 0x00df2a40 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ + 0x00df2a50 6578436f 6f726473 292e7267 622c206b exCoords).rgb, k │ │ │ │ + 0x00df2a60 57656967 68747329 3b200a20 20202066 Weights); . f │ │ │ │ + 0x00df2a70 6c6f6174 204c6c65 6674203d 20646f74 loat Lleft = dot │ │ │ │ + 0x00df2a80 28746578 74757265 28755f63 6f6c6f72 (texture(u_color │ │ │ │ + 0x00df2a90 5465782c 20765f6f 66667365 74302e78 Tex, v_offset0.x │ │ │ │ + 0x00df2aa0 79292e72 67622c20 6b576569 67687473 y).rgb, kWeights │ │ │ │ + 0x00df2ab0 293b200a 20202020 666c6f61 74204c74 ); . float Lt │ │ │ │ + 0x00df2ac0 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ + 0x00df2ad0 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ + 0x00df2ae0 66667365 74302e7a 77292e72 67622c20 ffset0.zw).rgb, │ │ │ │ + 0x00df2af0 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ + 0x00df2b00 76656334 2064656c 74613b20 0a202020 vec4 delta; . │ │ │ │ + 0x00df2b10 2064656c 74612e78 79203d20 61627328 delta.xy = abs( │ │ │ │ + 0x00df2b20 4c202d20 76656332 284c6c65 66742c20 L - vec2(Lleft, │ │ │ │ + 0x00df2b30 4c746f70 29293b20 0a202020 20766563 Ltop)); . vec │ │ │ │ + 0x00df2b40 32206564 67657320 3d207374 6570286b 2 edges = step(k │ │ │ │ + 0x00df2b50 54687265 73686f6c 642c2064 656c7461 Threshold, delta │ │ │ │ + 0x00df2b60 2e787929 3b200a20 20202069 66202864 .xy); . if (d │ │ │ │ + 0x00df2b70 6f742865 64676573 2c207665 63322831 ot(edges, vec2(1 │ │ │ │ + 0x00df2b80 2e302c20 312e3029 29203d3d 20302e30 .0, 1.0)) == 0.0 │ │ │ │ + 0x00df2b90 29200a20 20202020 20202064 69736361 ) . disca │ │ │ │ + 0x00df2ba0 72643b20 0a202020 20666c6f 6174204c rd; . float L │ │ │ │ + 0x00df2bb0 72696768 74203d20 646f7428 74657874 right = dot(text │ │ │ │ + 0x00df2bc0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00df2bd0 765f6f66 66736574 312e7879 292e7267 v_offset1.xy).rg │ │ │ │ + 0x00df2be0 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ + 0x00df2bf0 20202066 6c6f6174 204c626f 74746f6d float Lbottom │ │ │ │ + 0x00df2c00 20203d20 646f7428 74657874 75726528 = dot(texture( │ │ │ │ + 0x00df2c10 755f636f 6c6f7254 65782c20 765f6f66 u_colorTex, v_of │ │ │ │ + 0x00df2c20 66736574 312e7a77 292e7267 622c206b fset1.zw).rgb, k │ │ │ │ + 0x00df2c30 57656967 68747329 3b200a20 20202064 Weights); . d │ │ │ │ + 0x00df2c40 656c7461 2e7a7720 3d206162 73284c20 elta.zw = abs(L │ │ │ │ + 0x00df2c50 2d207665 6332284c 72696768 742c204c - vec2(Lright, L │ │ │ │ + 0x00df2c60 626f7474 6f6d2929 3b200a20 20202076 bottom)); . v │ │ │ │ + 0x00df2c70 65633220 6d617844 656c7461 203d206d ec2 maxDelta = m │ │ │ │ + 0x00df2c80 61782864 656c7461 2e78792c 2064656c ax(delta.xy, del │ │ │ │ + 0x00df2c90 74612e7a 77293b20 0a202020 20666c6f ta.zw); . flo │ │ │ │ + 0x00df2ca0 6174204c 6c656674 6c656674 203d2064 at Lleftleft = d │ │ │ │ + 0x00df2cb0 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ + 0x00df2cc0 6f725465 782c2076 5f6f6666 73657432 orTex, v_offset2 │ │ │ │ + 0x00df2cd0 2e787929 2e726762 2c206b57 65696768 .xy).rgb, kWeigh │ │ │ │ + 0x00df2ce0 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ + 0x00df2cf0 4c746f70 746f7020 3d20646f 74287465 Ltoptop = dot(te │ │ │ │ + 0x00df2d00 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00df2d10 2c20765f 6f666673 6574322e 7a77292e , v_offset2.zw). │ │ │ │ + 0x00df2d20 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ + 0x00df2d30 0a202020 2064656c 74612e7a 77203d20 . delta.zw = │ │ │ │ + 0x00df2d40 61627328 76656332 284c6c65 66742c20 abs(vec2(Lleft, │ │ │ │ + 0x00df2d50 4c746f70 29202d20 76656332 284c6c65 Ltop) - vec2(Lle │ │ │ │ + 0x00df2d60 66746c65 66742c20 4c746f70 746f7029 ftleft, Ltoptop) │ │ │ │ + 0x00df2d70 293b200a 20202020 6d617844 656c7461 ); . maxDelta │ │ │ │ + 0x00df2d80 203d206d 6178286d 61784465 6c74612e = max(maxDelta. │ │ │ │ + 0x00df2d90 78792c20 64656c74 612e7a77 293b200a xy, delta.zw); . │ │ │ │ + 0x00df2da0 20202020 666c6f61 74206669 6e616c44 float finalD │ │ │ │ + 0x00df2db0 656c7461 203d206d 6178286d 61784465 elta = max(maxDe │ │ │ │ + 0x00df2dc0 6c74612e 782c206d 61784465 6c74612e lta.x, maxDelta. │ │ │ │ + 0x00df2dd0 79293b20 0a202020 20656467 6573202a y); . edges * │ │ │ │ + 0x00df2de0 3d207374 65702866 696e616c 44656c74 = step(finalDelt │ │ │ │ + 0x00df2df0 612c2053 4d41415f 4c4f4341 4c5f434f a, SMAA_LOCAL_CO │ │ │ │ + 0x00df2e00 4e545241 53545f41 44415054 4154494f NTRAST_ADAPTATIO │ │ │ │ + 0x00df2e10 4e5f4641 43544f52 202a2064 656c7461 N_FACTOR * delta │ │ │ │ + 0x00df2e20 2e787929 3b200a20 20202076 5f467261 .xy); . v_Fra │ │ │ │ + 0x00df2e30 67436f6c 6f72203d 20766563 34286564 gColor = vec4(ed │ │ │ │ + 0x00df2e40 6765732c 20302e30 2c20312e 30293b20 ges, 0.0, 1.0); │ │ │ │ + 0x00df2e50 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00df2e60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df2e70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df2e80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df2e90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df2ea0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df2eb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df2ec0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df2ed0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df2ee0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df2ef0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df2f00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df2f10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df2f20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df2f30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df2f40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df2f50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df2f60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df2f70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df2f80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df2f90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df2fa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df2fb0 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00df2fc0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00df2fd0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00df2fe0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00df2ff0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00df3000 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00df3010 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00df3020 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00df3030 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00df3040 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00df3050 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00df3060 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00df3070 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00df3080 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00df3090 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00df30a0 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00df30b0 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00df30c0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00df30d0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00df30e0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00df30f0 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00df3100 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00df3110 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00df3120 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00df3130 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00df3140 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00df3150 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00df3160 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00df3170 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00df3180 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00df3190 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00df31a0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00df31b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df31c0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00df31d0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00df31e0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00df31f0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00df3200 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00df3210 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00df3220 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00df3230 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00df3240 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00df3250 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00df3260 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00df3270 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00df3280 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df3290 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00df32a0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00df32b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df32c0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00df32d0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00df32e0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00df32f0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00df3300 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00df3310 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00df3320 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00df3330 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00df3340 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00df3350 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00df3360 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00df3370 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00df3380 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00df3390 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00df33a0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00df33b0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00df33c0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00df33d0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00df33e0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00df33f0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00df3400 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00df3410 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00df3420 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00df3430 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00df3440 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00df3450 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00df3460 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df3470 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00df3480 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00df3490 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00df34a0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00df34b0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00df34c0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00df34d0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00df34e0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00df34f0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00df3500 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00df3510 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00df3520 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00df3530 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00df3540 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00df3550 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00df3560 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00df3570 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00df3580 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00df3590 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00df35a0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00df35b0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00df35c0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00df35d0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00df35e0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00df35f0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00df3600 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00df3610 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00df3620 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00df3630 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00df3640 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00df3650 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00df3660 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00df3670 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00df3680 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00df3690 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00df36a0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00df36b0 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00df36c0 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00df36d0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00df36e0 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ + 0x00df36f0 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ + 0x00df3700 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ + 0x00df3710 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ + 0x00df3720 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ + 0x00df3730 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ + 0x00df3740 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00df3750 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00df3760 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00df3770 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ + 0x00df3780 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ + 0x00df3790 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00df37a0 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ + 0x00df37b0 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ + 0x00df37c0 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00df37d0 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00df37e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df37f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df3800 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df3810 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df3820 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df3830 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df3840 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df3850 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df3860 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df3870 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df3880 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df3890 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df38a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df38b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df38c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df38d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df38e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df38f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df3900 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df3910 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df3920 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df3930 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00df3940 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00df3950 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00df3960 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00df3970 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00df3980 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00df3990 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00df39a0 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00df39b0 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00df39c0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00df39d0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00df39e0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00df39f0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00df3a00 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00df3a10 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00df3a20 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00df3a30 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00df3a40 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00df3a50 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00df3a60 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00df3a70 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00df3a80 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00df3a90 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00df3aa0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00df3ab0 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00df3ac0 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00df3ad0 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00df3ae0 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00df3af0 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00df3b00 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00df3b10 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00df3b20 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00df3b30 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00df3b40 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00df3b50 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00df3b60 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00df3b70 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00df3b80 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00df3b90 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00df3ba0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00df3bb0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00df3bc0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00df3bd0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00df3be0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00df3bf0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df3c00 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00df3c10 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00df3c20 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00df3c30 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00df3c40 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00df3c50 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00df3c60 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00df3c70 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00df3c80 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00df3c90 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00df3ca0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00df3cb0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00df3cc0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00df3cd0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00df3ce0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00df3cf0 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00df3d00 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00df3d10 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00df3d20 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00df3d30 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00df3d40 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00df3d50 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00df3d60 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00df3d70 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00df3d80 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00df3d90 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00df3da0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df3db0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00df3dc0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00df3dd0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00df3de0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00df3df0 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00df3e00 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00df3e10 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00df3e20 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00df3e30 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00df3e40 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00df3e50 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00df3e60 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00df3e70 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00df3e80 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00df3e90 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00df3ea0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00df3eb0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00df3ec0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00df3ed0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00df3ee0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00df3ef0 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00df3f00 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00df3f10 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00df3f20 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00df3f30 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00df3f40 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00df3f50 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00df3f60 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00df3f70 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00df3f80 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00df3f90 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00df3fa0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00df3fb0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00df3fc0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00df3fd0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00df3fe0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00df3ff0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00df4000 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00df4010 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00df4020 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00df4030 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00df4040 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00df4050 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00df4060 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00df4070 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00df4080 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00df4090 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00df40a0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00df40b0 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ + 0x00df40c0 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ + 0x00df40d0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00df40e0 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00df40f0 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00df4100 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00df4110 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ + 0x00df4120 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00df4130 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ + 0x00df4140 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00df4150 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ + 0x00df4160 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ + 0x00df4170 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00df4180 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00df4190 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00df41a0 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ + 0x00df41b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df41c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df41d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df41e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df41f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df4200 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df4210 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df4220 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df4230 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df4240 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df4250 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df4260 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df4270 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df4280 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df4290 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df42a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df42b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df42c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df42d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df42e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df42f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df4300 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df4310 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00df4320 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00df4330 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00df4340 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00df4350 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00df4360 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00df4370 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00df4380 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00df4390 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00df43a0 69666f72 6d207665 63342075 5f726f75 iform vec4 u_rou │ │ │ │ + 0x00df43b0 74655061 72616d73 3b200a20 20756e69 teParams; . uni │ │ │ │ + 0x00df43c0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00df43d0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00df43e0 63342075 5f6d6173 6b436f6c 6f723b20 c4 u_maskColor; │ │ │ │ + 0x00df43f0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00df4400 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00df4410 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00df4420 755f6661 6b65436f 6c6f723b 200a2020 u_fakeColor; . │ │ │ │ + 0x00df4430 756e6966 6f726d20 76656334 20755f66 uniform vec4 u_f │ │ │ │ + 0x00df4440 616b654f 75746c69 6e65436f 6c6f723b akeOutlineColor; │ │ │ │ + 0x00df4450 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00df4460 20755f66 616b6542 6f726465 72733b20 u_fakeBorders; │ │ │ │ + 0x00df4470 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00df4480 755f7061 74746572 6e3b200a 2020756e u_pattern; . un │ │ │ │ + 0x00df4490 69666f72 6d207665 63322075 5f616e67 iform vec2 u_ang │ │ │ │ + 0x00df44a0 6c65436f 7353696e 3b200a20 20756e69 leCosSin; . uni │ │ │ │ + 0x00df44b0 666f726d 20666c6f 61742075 5f617272 form float u_arr │ │ │ │ + 0x00df44c0 6f774861 6c665769 6474683b 200a2020 owHalfWidth; . │ │ │ │ + 0x00df44d0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00df44e0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00df44f0 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00df4500 636f6c6f 72546578 3b200a20 20636f6e colorTex; . con │ │ │ │ + 0x00df4510 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00df4520 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00df4530 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ + 0x00df4540 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ + 0x00df4550 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ + 0x00df4560 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ + 0x00df4570 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ + 0x00df4580 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ + 0x00df4590 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ + 0x00df45a0 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ + 0x00df45b0 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ + 0x00df45c0 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ + 0x00df45d0 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ + 0x00df45e0 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ + 0x00df45f0 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ + 0x00df4600 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ + 0x00df4610 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ + 0x00df4620 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ + 0x00df4630 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ + 0x00df4640 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ + 0x00df4650 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00df4660 20202076 65633420 66696e61 6c436f6c vec4 finalCol │ │ │ │ + 0x00df4670 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00df4680 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ + 0x00df4690 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ + 0x00df46a0 2066696e 616c436f 6c6f722e 61202a3d finalColor.a *= │ │ │ │ + 0x00df46b0 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00df46c0 20696620 2866696e 616c436f 6c6f722e if (finalColor. │ │ │ │ + 0x00df46d0 61203c20 302e3031 29200a20 20202020 a < 0.01) . │ │ │ │ + 0x00df46e0 20646973 63617264 3b200a20 20202066 discard; . f │ │ │ │ + 0x00df46f0 696e616c 436f6c6f 72203d20 76656334 inalColor = vec4 │ │ │ │ + 0x00df4700 286d6978 2866696e 616c436f 6c6f722e (mix(finalColor. │ │ │ │ + 0x00df4710 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ + 0x00df4720 2e726762 2c20755f 6d61736b 436f6c6f .rgb, u_maskColo │ │ │ │ + 0x00df4730 722e6129 2c206669 6e616c43 6f6c6f72 r.a), finalColor │ │ │ │ + 0x00df4740 2e61293b 200a2020 2020765f 46726167 .a); . v_Frag │ │ │ │ + 0x00df4750 436f6c6f 72203d20 66696e61 6c436f6c Color = finalCol │ │ │ │ + 0x00df4760 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00df4770 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df4780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df4790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df47a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df47b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df47c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df47d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df47e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df47f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df4800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df4810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df4820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df4830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df4840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df4850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df4860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df4870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df4880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df4890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df48a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df48b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df48c0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00df48d0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00df48e0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00df48f0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00df4900 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00df4910 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00df4920 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00df4930 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00df4940 23656e64 6966200a 20206f75 74207665 #endif . out ve │ │ │ │ + 0x00df4950 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00df4960 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00df4970 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00df4980 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00df4990 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00df49a0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00df49b0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00df49c0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00df49d0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00df49e0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00df49f0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00df4a00 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00df4a10 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00df4a20 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00df4a30 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00df4a40 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00df4a50 696e6550 6173733b 200a2020 636f6e73 inePass; . cons │ │ │ │ + 0x00df4a60 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00df4a70 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00df4a80 2e303b20 0a20204c 4f575f50 20766563 .0; . LOW_P vec │ │ │ │ + 0x00df4a90 33204d6f 64756c61 74654279 50617474 3 ModulateByPatt │ │ │ │ + 0x00df4aa0 65726e44 6f747328 4c4f575f 50207665 ernDots(LOW_P ve │ │ │ │ + 0x00df4ab0 63332063 6f6c6f72 2c20666c 6f617420 c3 color, float │ │ │ │ + 0x00df4ac0 6461726b 656e2c20 666c6f61 7420636f darken, float co │ │ │ │ + 0x00df4ad0 76657261 67652920 0a20207b 200a2020 verage) . { . │ │ │ │ + 0x00df4ae0 2020636f 6e737420 666c6f61 74206b4c const float kL │ │ │ │ + 0x00df4af0 69676874 656e203d 20302e30 37353b20 ighten = 0.075; │ │ │ │ + 0x00df4b00 0a202020 20696620 28646f74 28636f6c . if (dot(col │ │ │ │ + 0x00df4b10 6f722c20 76656333 28302e32 3132362c or, vec3(0.2126, │ │ │ │ + 0x00df4b20 20302e37 3135322c 20302e30 37323229 0.7152, 0.0722) │ │ │ │ + 0x00df4b30 29203c20 302e3529 200a2020 20202020 ) < 0.5) . │ │ │ │ + 0x00df4b40 72657475 726e2063 6f6c6f72 202b2063 return color + c │ │ │ │ + 0x00df4b50 6f766572 61676520 2a206b4c 69676874 overage * kLight │ │ │ │ + 0x00df4b60 656e3b20 0a202020 20726574 75726e20 en; . return │ │ │ │ + 0x00df4b70 636f6c6f 72202a20 6d697828 312e302c color * mix(1.0, │ │ │ │ + 0x00df4b80 20646172 6b656e2c 20636f76 65726167 darken, coverag │ │ │ │ + 0x00df4b90 65293b20 0a20207d 200a2020 766f6964 e); . } . void │ │ │ │ + 0x00df4ba0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00df4bb0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00df4bc0 46200a20 2020204c 4f575f50 20766563 F . LOW_P vec │ │ │ │ + 0x00df4bd0 3420636f 6c6f7220 3d20765f 636f6c6f 4 color = v_colo │ │ │ │ + 0x00df4be0 723b200a 20202365 6c736520 0a202020 r; . #else . │ │ │ │ + 0x00df4bf0 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ + 0x00df4c00 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00df4c10 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ + 0x00df4c20 6578436f 6f726429 3b200a20 2023656e exCoord); . #en │ │ │ │ + 0x00df4c30 64696620 0a202020 20636f6c 6f722e61 dif . color.a │ │ │ │ + 0x00df4c40 202a3d20 755f6f70 61636974 793b200a *= u_opacity; . │ │ │ │ + 0x00df4c50 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ + 0x00df4c60 3d20636f 6c6f723b 200a2020 7d200a00 = color; . } .. │ │ │ │ + 0x00df4c70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df4c80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df4c90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df4ca0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df4cb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df4cc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df4cd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df4ce0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df4cf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df4d00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df4d10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df4d20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df4d30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df4d40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df4d50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df4d60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df4d70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df4d80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df4d90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df4da0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df4db0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df4dc0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00df4dd0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00df4de0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00df4df0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00df4e00 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00df4e10 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00df4e20 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00df4e30 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00df4e40 23656e64 6966200a 2020696e 20666c6f #endif . in flo │ │ │ │ + 0x00df4e50 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00df4e60 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00df4e70 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00df4e80 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00df4e90 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00df4ea0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00df4eb0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00df4ec0 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00df4ed0 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00df4ee0 65633420 755f706f 73697469 6f6e3b20 ec4 u_position; │ │ │ │ + 0x00df4ef0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00df4f00 755f6c69 6e655061 72616d73 3b200a20 u_lineParams; . │ │ │ │ + 0x00df4f10 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00df4f20 5f616363 75726163 793b200a 2020756e _accuracy; . un │ │ │ │ + 0x00df4f30 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00df4f40 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00df4f50 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00df4f60 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00df4f70 61742075 5f617a69 6d75743b 200a2020 at u_azimut; . │ │ │ │ + 0x00df4f80 636f6e73 7420666c 6f617420 6b416e74 const float kAnt │ │ │ │ + 0x00df4f90 69616c69 6173696e 67546872 6573686f ialiasingThresho │ │ │ │ + 0x00df4fa0 6c64203d 20302e39 323b200a 2020636f ld = 0.92; . co │ │ │ │ + 0x00df4fb0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00df4fc0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00df4fd0 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ + 0x00df4fe0 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ + 0x00df4ff0 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ + 0x00df5000 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ + 0x00df5010 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ + 0x00df5020 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ + 0x00df5030 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ + 0x00df5040 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ + 0x00df5050 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ + 0x00df5060 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ + 0x00df5070 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ + 0x00df5080 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ + 0x00df5090 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ + 0x00df50a0 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ + 0x00df50b0 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ + 0x00df50c0 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ + 0x00df50d0 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ + 0x00df50e0 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ + 0x00df50f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00df5100 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ + 0x00df5110 56544620 0a202020 204c4f57 5f502076 VTF . LOW_P v │ │ │ │ + 0x00df5120 65633420 636f6c6f 72203d20 765f636f ec4 color = v_co │ │ │ │ + 0x00df5130 6c6f723b 200a2020 23656c73 65200a20 lor; . #else . │ │ │ │ + 0x00df5140 2020204c 4f575f50 20766563 3420636f LOW_P vec4 co │ │ │ │ + 0x00df5150 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00df5160 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00df5170 72546578 436f6f72 64293b20 0a202023 rTexCoord); . # │ │ │ │ + 0x00df5180 656e6469 66200a20 20202063 6f6c6f72 endif . color │ │ │ │ + 0x00df5190 2e61202a 3d20755f 6f706163 6974793b .a *= u_opacity; │ │ │ │ + 0x00df51a0 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ + 0x00df51b0 2028312e 30202d20 736d6f6f 74687374 (1.0 - smoothst │ │ │ │ + 0x00df51c0 6570286b 416e7469 616c6961 73696e67 ep(kAntialiasing │ │ │ │ + 0x00df51d0 54687265 73686f6c 642c2031 2e302c20 Threshold, 1.0, │ │ │ │ + 0x00df51e0 61627328 765f6c65 6e677468 59292929 abs(v_lengthY))) │ │ │ │ + 0x00df51f0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00df5200 6f72203d 20636f6c 6f723b20 0a20207d or = color; . } │ │ │ │ + 0x00df5210 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00df5220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df5230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df5240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df5250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df5260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df5270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df5280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df5290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df52a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df52b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df52c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df52d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df52e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df52f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df5300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df5310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df5320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df5330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df5340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df5350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df5360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df5370 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00df5380 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00df5390 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ + 0x00df53a0 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ + 0x00df53b0 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ + 0x00df53c0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00df53d0 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ + 0x00df53e0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00df53f0 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ + 0x00df5400 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00df5410 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ + 0x00df5420 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00df5430 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00df5440 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00df5450 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00df5460 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00df5470 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00df5480 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00df5490 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00df54a0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00df54b0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00df54c0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00df54d0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00df54e0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00df54f0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00df5500 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00df5510 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00df5520 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00df5530 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00df5540 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00df5550 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00df5560 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df5570 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00df5580 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00df5590 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00df55a0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00df55b0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00df55c0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00df55d0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00df55e0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00df55f0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00df5600 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00df5610 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00df5620 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00df5630 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00df5640 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00df5650 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00df5660 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00df5670 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00df5680 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00df5690 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00df56a0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00df56b0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00df56c0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00df56d0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00df56e0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00df56f0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00df5700 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00df5710 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00df5720 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00df5730 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00df5740 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00df5750 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00df5760 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00df5770 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00df5780 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00df5790 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00df57a0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00df57b0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00df57c0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00df57d0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00df57e0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00df57f0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00df5800 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00df5810 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00df5820 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00df5830 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00df5840 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00df5850 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00df5860 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00df5870 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00df5880 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00df5890 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00df58a0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00df58b0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00df58c0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00df58d0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00df58e0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00df58f0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00df5900 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00df5910 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00df5920 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00df5930 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00df5940 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00df5950 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00df5960 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00df5970 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00df5980 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00df5990 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00df59a0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00df59b0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00df59c0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00df59d0 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ + 0x00df59e0 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ + 0x00df59f0 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ + 0x00df5a00 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ + 0x00df5a10 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ + 0x00df5a20 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ + 0x00df5a30 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ + 0x00df5a40 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00df5a50 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ + 0x00df5a60 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00df5a70 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ + 0x00df5a80 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ + 0x00df5a90 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ + 0x00df5aa0 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ + 0x00df5ab0 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ + 0x00df5ac0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00df5ad0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00df5ae0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df5af0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df5b00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df5b10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df5b20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df5b30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df5b40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df5b50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df5b60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df5b70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df5b80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df5b90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df5ba0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df5bb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df5bc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df5bd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df5be0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df5bf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df5c00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df5c10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df5c20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df5c30 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00df5c40 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00df5c50 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00df5c60 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ + 0x00df5c70 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00df5c80 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ + 0x00df5c90 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00df5ca0 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00df5cb0 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00df5cc0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00df5cd0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00df5ce0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00df5cf0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00df5d00 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00df5d10 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ + 0x00df5d20 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00df5d30 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00df5d40 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00df5d50 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00df5d60 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00df5d70 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00df5d80 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00df5d90 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00df5da0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00df5db0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00df5dc0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00df5dd0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00df5de0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00df5df0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00df5e00 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00df5e10 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00df5e20 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00df5e30 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00df5e40 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00df5e50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00df5e60 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00df5e70 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00df5e80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00df5e90 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00df5ea0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00df5eb0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00df5ec0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00df5ed0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00df5ee0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00df5ef0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00df5f00 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00df5f10 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00df5f20 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00df5f30 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00df5f40 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00df5f50 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00df5f60 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00df5f70 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00df5f80 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00df5f90 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00df5fa0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00df5fb0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00df5fc0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00df5fd0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00df5fe0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00df5ff0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00df6000 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00df6010 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00df6020 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00df6030 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00df6040 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00df6050 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00df6060 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00df6070 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00df6080 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00df6090 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00df60a0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00df60b0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00df60c0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00df60d0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00df60e0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00df60f0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00df6100 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00df6110 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00df6120 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00df6130 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00df6140 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00df6150 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00df6160 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00df6170 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00df6180 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00df6190 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00df61a0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00df61b0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00df61c0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00df61d0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00df61e0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00df61f0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00df6200 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00df6210 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00df6220 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00df6230 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00df6240 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00df6250 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00df6260 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00df6270 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00df6280 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00df6290 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00df62a0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00df62b0 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00df62c0 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ + 0x00df62d0 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ + 0x00df62e0 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ + 0x00df62f0 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ + 0x00df6300 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ + 0x00df6310 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ + 0x00df6320 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ + 0x00df6330 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ + 0x00df6340 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ + 0x00df6350 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ + 0x00df6360 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ + 0x00df6370 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ + 0x00df6380 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ + 0x00df6390 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ + 0x00df63a0 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ + 0x00df63b0 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ + 0x00df63c0 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ + 0x00df63d0 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ + 0x00df63e0 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ + 0x00df63f0 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ + 0x00df6400 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00df6410 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00df6420 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df6430 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df6440 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df6450 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df6460 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df6470 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df6480 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df6490 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df64a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df64b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df64c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df64d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df64e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df64f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df6500 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df6510 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df6520 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df6530 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df6540 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df6550 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df6560 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df6570 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00df6580 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00df6590 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00df65a0 2020696e 20666c6f 61742076 5f68616c in float v_hal │ │ │ │ + 0x00df65b0 664c656e 6774683b 200a2020 6f757420 fLength; . out │ │ │ │ + 0x00df65c0 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00df65d0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00df65e0 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00df65f0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00df6600 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00df6610 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00df6620 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00df6630 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00df6640 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00df6650 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00df6660 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00df6670 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00df6680 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00df6690 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00df66a0 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00df66b0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00df66c0 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00df66d0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00df66e0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00df66f0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00df6700 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00df6710 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00df6720 32442075 5f6d6173 6b546578 3b200a20 2D u_maskTex; . │ │ │ │ + 0x00df6730 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00df6740 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00df6750 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00df6760 6f6e7374 20666c6f 6174206b 4f75746c onst float kOutl │ │ │ │ + 0x00df6770 696e6554 68726573 686f6c64 31203d20 ineThreshold1 = │ │ │ │ + 0x00df6780 302e383b 200a2020 636f6e73 7420666c 0.8; . const fl │ │ │ │ + 0x00df6790 6f617420 6b4f7574 6c696e65 54687265 oat kOutlineThre │ │ │ │ + 0x00df67a0 73686f6c 6432203d 20302e35 3b200a20 shold2 = 0.5; . │ │ │ │ + 0x00df67b0 20636f6e 73742066 6c6f6174 206b4d61 const float kMa │ │ │ │ + 0x00df67c0 736b4f70 61636974 79203d20 302e373b skOpacity = 0.7; │ │ │ │ + 0x00df67d0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00df67e0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00df67f0 72203d20 31303030 2e303b20 0a20204c r = 1000.0; . L │ │ │ │ + 0x00df6800 4f575f50 20766563 33204d6f 64756c61 OW_P vec3 Modula │ │ │ │ + 0x00df6810 74654279 50617474 65726e44 6f747328 teByPatternDots( │ │ │ │ + 0x00df6820 4c4f575f 50207665 63332063 6f6c6f72 LOW_P vec3 color │ │ │ │ + 0x00df6830 2c20666c 6f617420 6461726b 656e2c20 , float darken, │ │ │ │ + 0x00df6840 666c6f61 7420636f 76657261 67652920 float coverage) │ │ │ │ + 0x00df6850 0a20207b 200a2020 2020636f 6e737420 . { . const │ │ │ │ + 0x00df6860 666c6f61 74206b4c 69676874 656e203d float kLighten = │ │ │ │ + 0x00df6870 20302e30 37353b20 0a202020 20696620 0.075; . if │ │ │ │ + 0x00df6880 28646f74 28636f6c 6f722c20 76656333 (dot(color, vec3 │ │ │ │ + 0x00df6890 28302e32 3132362c 20302e37 3135322c (0.2126, 0.7152, │ │ │ │ + 0x00df68a0 20302e30 37323229 29203c20 302e3529 0.0722)) < 0.5) │ │ │ │ + 0x00df68b0 200a2020 20202020 72657475 726e2063 . return c │ │ │ │ + 0x00df68c0 6f6c6f72 202b2063 6f766572 61676520 olor + coverage │ │ │ │ + 0x00df68d0 2a206b4c 69676874 656e3b20 0a202020 * kLighten; . │ │ │ │ + 0x00df68e0 20726574 75726e20 636f6c6f 72202a20 return color * │ │ │ │ + 0x00df68f0 6d697828 312e302c 20646172 6b656e2c mix(1.0, darken, │ │ │ │ + 0x00df6900 20636f76 65726167 65293b20 0a20207d coverage); . } │ │ │ │ + 0x00df6910 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00df6920 0a20207b 200a2020 20207665 63342063 . { . vec4 c │ │ │ │ + 0x00df6930 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00df6940 5f636f6c 6f725465 782c2076 5f636f6c _colorTex, v_col │ │ │ │ + 0x00df6950 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ + 0x00df6960 2020666c 6f617420 616c7068 61436f64 float alphaCod │ │ │ │ + 0x00df6970 65203d20 636f6c6f 722e613b 200a2020 e = color.a; . │ │ │ │ + 0x00df6980 20207665 6334206d 61736b20 3d207465 vec4 mask = te │ │ │ │ + 0x00df6990 78747572 6528755f 6d61736b 5465782c xture(u_maskTex, │ │ │ │ + 0x00df69a0 20765f6d 61736b54 6578436f 6f726429 v_maskTexCoord) │ │ │ │ + 0x00df69b0 3b200a20 20202063 6f6c6f72 2e61203d ; . color.a = │ │ │ │ + 0x00df69c0 20755f6f 70616369 7479202a 2028312e u_opacity * (1. │ │ │ │ + 0x00df69d0 30202d20 736d6f6f 74687374 6570286b 0 - smoothstep(k │ │ │ │ + 0x00df69e0 416e7469 616c6961 73696e67 54687265 AntialiasingThre │ │ │ │ + 0x00df69f0 73686f6c 642c2031 2e302c20 61627328 shold, 1.0, abs( │ │ │ │ + 0x00df6a00 765f6861 6c664c65 6e677468 2929293b v_halfLength))); │ │ │ │ + 0x00df6a10 200a2020 2020636f 6c6f722e 72676220 . color.rgb │ │ │ │ + 0x00df6a20 3d206d69 7828636f 6c6f722e 7267622c = mix(color.rgb, │ │ │ │ + 0x00df6a30 206d6173 6b2e7267 62202a20 6d697828 mask.rgb * mix( │ │ │ │ + 0x00df6a40 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00df6a50 722e7267 622c2075 5f646172 6b417272 r.rgb, u_darkArr │ │ │ │ + 0x00df6a60 6f77436f 6c6f722e 7267622c 20737465 owColor.rgb, ste │ │ │ │ + 0x00df6a70 7028616c 70686143 6f64652c 20302e36 p(alphaCode, 0.6 │ │ │ │ + 0x00df6a80 29292c20 6d61736b 2e61202a 206b4d61 )), mask.a * kMa │ │ │ │ + 0x00df6a90 736b4f70 61636974 79293b20 0a202020 skOpacity); . │ │ │ │ + 0x00df6aa0 20696620 28755f6f 75746c69 6e65203e if (u_outline > │ │ │ │ + 0x00df6ab0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00df6ac0 20202020 636f6c6f 722e7267 62203d20 color.rgb = │ │ │ │ + 0x00df6ad0 6d697828 636f6c6f 722e7267 622c2075 mix(color.rgb, u │ │ │ │ + 0x00df6ae0 5f6f7574 6c696e65 436f6c6f 722e7267 _outlineColor.rg │ │ │ │ + 0x00df6af0 622c2073 74657028 6b4f7574 6c696e65 b, step(kOutline │ │ │ │ + 0x00df6b00 54687265 73686f6c 64312c20 61627328 Threshold1, abs( │ │ │ │ + 0x00df6b10 765f6861 6c664c65 6e677468 2929293b v_halfLength))); │ │ │ │ + 0x00df6b20 200a2020 20202020 636f6c6f 722e7267 . color.rg │ │ │ │ + 0x00df6b30 62203d20 6d697828 636f6c6f 722e7267 b = mix(color.rg │ │ │ │ + 0x00df6b40 622c2075 5f6f7574 6c696e65 436f6c6f b, u_outlineColo │ │ │ │ + 0x00df6b50 722e7267 622c2073 6d6f6f74 68737465 r.rgb, smoothste │ │ │ │ + 0x00df6b60 70286b4f 75746c69 6e655468 72657368 p(kOutlineThresh │ │ │ │ + 0x00df6b70 6f6c6432 2c206b4f 75746c69 6e655468 old2, kOutlineTh │ │ │ │ + 0x00df6b80 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ + 0x00df6b90 68616c66 4c656e67 74682929 293b200a halfLength))); . │ │ │ │ + 0x00df6ba0 20202020 7d200a20 20202076 5f467261 } . v_Fra │ │ │ │ + 0x00df6bb0 67436f6c 6f72203d 20636f6c 6f723b20 gColor = color; │ │ │ │ + 0x00df6bc0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00df6bd0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df6be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df6bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df6c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df6c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df6c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df6c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df6c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df6c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df6c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df6c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df6c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df6c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df6ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df6cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df6cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df6cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df6ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df6cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df6d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df6d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df6d20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df6d30 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00df6d40 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00df6d50 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00df6d60 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00df6d70 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00df6d80 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00df6d90 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00df6da0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00df6db0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00df6dc0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00df6dd0 673b200a 2020636f 6e737420 76656333 g; . const vec3 │ │ │ │ + 0x00df6de0 206c6967 68744469 72203d20 76656333 lightDir = vec3 │ │ │ │ + 0x00df6df0 28302e33 31362c20 302e302c 20302e39 (0.316, 0.0, 0.9 │ │ │ │ + 0x00df6e00 3438293b 200a2020 636f6e73 7420666c 48); . const fl │ │ │ │ + 0x00df6e10 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00df6e20 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00df6e30 0a20204c 4f575f50 20766563 33204d6f . LOW_P vec3 Mo │ │ │ │ + 0x00df6e40 64756c61 74654279 50617474 65726e44 dulateByPatternD │ │ │ │ + 0x00df6e50 6f747328 4c4f575f 50207665 63332063 ots(LOW_P vec3 c │ │ │ │ + 0x00df6e60 6f6c6f72 2c20666c 6f617420 6461726b olor, float dark │ │ │ │ + 0x00df6e70 656e2c20 666c6f61 7420636f 76657261 en, float covera │ │ │ │ + 0x00df6e80 67652920 0a20207b 200a2020 2020636f ge) . { . co │ │ │ │ + 0x00df6e90 6e737420 666c6f61 74206b4c 69676874 nst float kLight │ │ │ │ + 0x00df6ea0 656e203d 20302e30 37353b20 0a202020 en = 0.075; . │ │ │ │ + 0x00df6eb0 20696620 28646f74 28636f6c 6f722c20 if (dot(color, │ │ │ │ + 0x00df6ec0 76656333 28302e32 3132362c 20302e37 vec3(0.2126, 0.7 │ │ │ │ + 0x00df6ed0 3135322c 20302e30 37323229 29203c20 152, 0.0722)) < │ │ │ │ + 0x00df6ee0 302e3529 200a2020 20202020 72657475 0.5) . retu │ │ │ │ + 0x00df6ef0 726e2063 6f6c6f72 202b2063 6f766572 rn color + cover │ │ │ │ + 0x00df6f00 61676520 2a206b4c 69676874 656e3b20 age * kLighten; │ │ │ │ + 0x00df6f10 0a202020 20726574 75726e20 636f6c6f . return colo │ │ │ │ + 0x00df6f20 72202a20 6d697828 312e302c 20646172 r * mix(1.0, dar │ │ │ │ + 0x00df6f30 6b656e2c 20636f76 65726167 65293b20 ken, coverage); │ │ │ │ + 0x00df6f40 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00df6f50 6e282920 0a20207b 200a2020 2020666c n() . { . fl │ │ │ │ + 0x00df6f60 6f617420 70686f6e 67446966 66757365 oat phongDiffuse │ │ │ │ + 0x00df6f70 203d206d 61782830 2e302c20 2d646f74 = max(0.0, -dot │ │ │ │ + 0x00df6f80 286c6967 68744469 722c2076 5f6e6f72 (lightDir, v_nor │ │ │ │ + 0x00df6f90 6d616c29 293b200a 20202020 765f4672 mal)); . v_Fr │ │ │ │ + 0x00df6fa0 6167436f 6c6f7220 3d207665 63342828 agColor = vec4(( │ │ │ │ + 0x00df6fb0 70686f6e 67446966 66757365 202a2030 phongDiffuse * 0 │ │ │ │ + 0x00df6fc0 2e35202b 20302e35 29202a20 755f636f .5 + 0.5) * u_co │ │ │ │ + 0x00df6fd0 6c6f722e 7267622c 20755f63 6f6c6f72 lor.rgb, u_color │ │ │ │ + 0x00df6fe0 2e61293b 200a2020 7d200a00 00000000 .a); . } ...... │ │ │ │ + 0x00df6ff0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df7000 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df7010 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df7020 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df7030 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df7040 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df7050 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df7060 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df7070 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df7080 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df7090 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df70a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df70b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df70c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df70d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df70e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df70f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df7100 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df7110 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df7120 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df7130 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df7140 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df7150 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00df7160 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00df7170 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00df7180 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00df7190 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ + 0x00df71a0 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ + 0x00df71b0 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ + 0x00df71c0 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ + 0x00df71d0 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00df71e0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00df71f0 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ + 0x00df7200 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ + 0x00df7210 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00df7220 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00df7230 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00df7240 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00df7250 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00df7260 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00df7270 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00df7280 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00df7290 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00df72a0 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00df72b0 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00df72c0 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00df72d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00df72e0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00df72f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00df7300 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00df7310 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00df7320 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ + 0x00df7330 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ + 0x00df7340 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00df7350 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ + 0x00df7360 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ + 0x00df7370 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ + 0x00df7380 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ + 0x00df7390 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00df73a0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00df73b0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00df73c0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00df73d0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00df73e0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00df73f0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00df7400 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00df7410 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00df7420 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00df7430 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00df7440 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00df7450 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00df7460 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00df7470 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00df7480 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00df7490 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00df74a0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00df74b0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00df74c0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00df74d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df74e0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00df74f0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00df7500 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00df7510 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00df7520 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00df7530 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00df7540 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00df7550 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00df7560 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00df7570 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00df7580 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00df7590 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00df75a0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00df75b0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00df75c0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00df75d0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00df75e0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00df75f0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00df7600 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00df7610 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00df7620 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00df7630 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00df7640 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00df7650 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00df7660 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00df7670 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00df7680 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00df7690 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00df76a0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00df76b0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00df76c0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00df76d0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00df76e0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00df76f0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00df7700 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00df7710 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00df7720 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00df7730 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00df7740 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00df7750 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00df7760 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00df7770 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00df7780 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00df7790 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00df77a0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00df77b0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00df77c0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00df77d0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00df77e0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00df77f0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00df7800 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00df7810 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00df7820 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00df7830 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00df7840 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00df7850 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00df7860 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00df7870 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00df7880 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00df7890 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00df78a0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00df78b0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00df78c0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00df78d0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00df78e0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00df78f0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00df7900 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00df7910 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00df7920 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00df7930 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00df7940 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00df7950 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00df7960 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00df7970 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00df7980 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ + 0x00df7990 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ + 0x00df79a0 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ + 0x00df79b0 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ + 0x00df79c0 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ + 0x00df79d0 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00df79e0 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00df79f0 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ + 0x00df7a00 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ + 0x00df7a10 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ + 0x00df7a20 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ + 0x00df7a30 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00df7a40 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ + 0x00df7a50 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00df7a60 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ + 0x00df7a70 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00df7a80 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00df7a90 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00df7aa0 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ + 0x00df7ab0 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ + 0x00df7ac0 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ + 0x00df7ad0 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ + 0x00df7ae0 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ + 0x00df7af0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00df7b00 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ + 0x00df7b10 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ + 0x00df7b20 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ + 0x00df7b30 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ + 0x00df7b40 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ + 0x00df7b50 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ + 0x00df7b60 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ + 0x00df7b70 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00df7b80 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00df7b90 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00df7ba0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00df7bb0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00df7bc0 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ + 0x00df7bd0 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ + 0x00df7be0 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ + 0x00df7bf0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00df7c00 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00df7c10 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00df7c20 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00df7c30 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00df7c40 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00df7c50 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00df7c60 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00df7c70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df7c80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df7c90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df7ca0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df7cb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df7cc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df7cd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df7ce0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df7cf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df7d00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df7d10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df7d20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df7d30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df7d40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df7d50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df7d60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df7d70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df7d80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df7d90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df7da0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df7db0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df7dc0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00df7dd0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00df7de0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00df7df0 20755f63 6f6c6f72 3b200a20 20636f6e u_color; . con │ │ │ │ + 0x00df7e00 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00df7e10 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00df7e20 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ + 0x00df7e30 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ + 0x00df7e40 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ + 0x00df7e50 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ + 0x00df7e60 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ + 0x00df7e70 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ + 0x00df7e80 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ + 0x00df7e90 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ + 0x00df7ea0 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ + 0x00df7eb0 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ + 0x00df7ec0 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ + 0x00df7ed0 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ + 0x00df7ee0 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ + 0x00df7ef0 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ + 0x00df7f00 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ + 0x00df7f10 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ + 0x00df7f20 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ + 0x00df7f30 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ + 0x00df7f40 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00df7f50 20202076 5f467261 67436f6c 6f72203d v_FragColor = │ │ │ │ + 0x00df7f60 20755f63 6f6c6f72 3b200a20 207d200a u_color; . } . │ │ │ │ + 0x00df7f70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df7f80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df7f90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df7fa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df7fb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df7fc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df7fd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df7fe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df7ff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df8000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df8010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df8020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df8030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df8040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df8050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df8060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df8070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df8080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df8090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df80a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df80b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df80c0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00df80d0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00df80e0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00df80f0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00df8100 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00df8110 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00df8120 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00df8130 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00df8140 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df8150 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00df8160 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00df8170 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00df8180 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00df8190 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00df81a0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00df81b0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00df81c0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00df81d0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00df81e0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00df81f0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00df8200 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00df8210 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00df8220 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00df8230 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00df8240 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00df8250 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00df8260 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00df8270 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00df8280 6c6f6174 206b4365 6c6c5078 203d2034 loat kCellPx = 4 │ │ │ │ + 0x00df8290 2e303b20 20202020 2020202f 2f206465 .0; // de │ │ │ │ + 0x00df82a0 6e736572 20746861 6e207374 6970706c nser than stippl │ │ │ │ + 0x00df82b0 65202864 69766964 65732074 68652031 e (divides the 1 │ │ │ │ + 0x00df82c0 36707820 74696c65 2c20736f 2063656c 6px tile, so cel │ │ │ │ + 0x00df82d0 6c732074 696c6520 7365616d 6c657373 ls tile seamless │ │ │ │ + 0x00df82e0 6c792920 0a202063 6f6e7374 20666c6f ly) . const flo │ │ │ │ + 0x00df82f0 6174206b 42617365 52616469 75735078 at kBaseRadiusPx │ │ │ │ + 0x00df8300 203d2030 2e373b20 0a202063 6f6e7374 = 0.7; . const │ │ │ │ + 0x00df8310 20666c6f 6174206b 52616469 75735661 float kRadiusVa │ │ │ │ + 0x00df8320 72203d20 302e363b 20202020 202f2f20 r = 0.6; // │ │ │ │ + 0x00df8330 7065722d 63656c6c 20726164 69757320 per-cell radius │ │ │ │ + 0x00df8340 76617269 6174696f 6e202d3e 20697272 variation -> irr │ │ │ │ + 0x00df8350 6567756c 61722073 697a6573 200a2020 egular sizes . │ │ │ │ + 0x00df8360 636f6e73 7420666c 6f617420 6b4a6974 const float kJit │ │ │ │ + 0x00df8370 74657220 3d20302e 353b2020 20202020 ter = 0.5; │ │ │ │ + 0x00df8380 20202f2f 206b6565 70206b4a 69747465 // keep kJitte │ │ │ │ + 0x00df8390 722a302e 352a6b43 656c6c50 78202b20 r*0.5*kCellPx + │ │ │ │ + 0x00df83a0 6d617852 61646975 73203c20 6b43656c maxRadius < kCel │ │ │ │ + 0x00df83b0 6c50782a 302e3520 0a202063 6f6e7374 lPx*0.5 . const │ │ │ │ + 0x00df83c0 20666c6f 6174206b 4461726b 656e203d float kDarken = │ │ │ │ + 0x00df83d0 20302e37 383b200a 2020666c 6f617420 0.78; . float │ │ │ │ + 0x00df83e0 48617368 28766563 32207029 200a2020 Hash(vec2 p) . │ │ │ │ + 0x00df83f0 7b200a20 20202070 203d2066 72616374 { . p = fract │ │ │ │ + 0x00df8400 2870202a 20766563 32283132 372e312c (p * vec2(127.1, │ │ │ │ + 0x00df8410 20333131 2e372929 3b200a20 20202070 311.7)); . p │ │ │ │ + 0x00df8420 202b3d20 646f7428 702c2070 202b2033 += dot(p, p + 3 │ │ │ │ + 0x00df8430 342e3233 293b200a 20202020 72657475 4.23); . retu │ │ │ │ + 0x00df8440 726e2066 72616374 28702e78 202a2070 rn fract(p.x * p │ │ │ │ + 0x00df8450 2e79293b 200a2020 7d200a20 20636f6e .y); . } . con │ │ │ │ + 0x00df8460 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00df8470 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00df8480 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ + 0x00df8490 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ + 0x00df84a0 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ + 0x00df84b0 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ + 0x00df84c0 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ + 0x00df84d0 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ + 0x00df84e0 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ + 0x00df84f0 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ + 0x00df8500 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ + 0x00df8510 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ + 0x00df8520 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ + 0x00df8530 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ + 0x00df8540 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ + 0x00df8550 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ + 0x00df8560 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ + 0x00df8570 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ + 0x00df8580 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ + 0x00df8590 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ + 0x00df85a0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00df85b0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00df85c0 5446200a 20202020 4c4f575f 50207665 TF . LOW_P ve │ │ │ │ + 0x00df85d0 63342063 6f6c6f72 203d2076 5f636f6c c4 color = v_col │ │ │ │ + 0x00df85e0 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ + 0x00df85f0 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00df8600 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00df8610 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ + 0x00df8620 54657843 6f6f7264 73293b20 0a202023 TexCoords); . # │ │ │ │ + 0x00df8630 656e6469 66200a20 20202076 65633220 endif . vec2 │ │ │ │ + 0x00df8640 7078203d 20765f6d 61736b54 6578436f px = v_maskTexCo │ │ │ │ + 0x00df8650 6f726473 202a2031 362e303b 200a2020 ords * 16.0; . │ │ │ │ + 0x00df8660 20207665 63322063 656c6c20 3d20666c vec2 cell = fl │ │ │ │ + 0x00df8670 6f6f7228 7078202f 206b4365 6c6c5078 oor(px / kCellPx │ │ │ │ + 0x00df8680 293b200a 20202020 76656332 20746f43 ); . vec2 toC │ │ │ │ + 0x00df8690 656e7465 72203d20 0a202020 20202020 enter = . │ │ │ │ + 0x00df86a0 20286672 61637428 7078202f 206b4365 (fract(px / kCe │ │ │ │ + 0x00df86b0 6c6c5078 29202d20 302e3529 202a206b llPx) - 0.5) * k │ │ │ │ + 0x00df86c0 43656c6c 5078202d 20287665 63322848 CellPx - (vec2(H │ │ │ │ + 0x00df86d0 61736828 63656c6c 292c2048 61736828 ash(cell), Hash( │ │ │ │ + 0x00df86e0 63656c6c 202b2031 392e3729 29202d20 cell + 19.7)) - │ │ │ │ + 0x00df86f0 302e3529 202a2028 6b4a6974 74657220 0.5) * (kJitter │ │ │ │ + 0x00df8700 2a206b43 656c6c50 78293b20 0a202020 * kCellPx); . │ │ │ │ + 0x00df8710 20666c6f 61742072 61646975 73203d20 float radius = │ │ │ │ + 0x00df8720 6b426173 65526164 69757350 78202a20 kBaseRadiusPx * │ │ │ │ + 0x00df8730 28312e30 202d206b 52616469 75735661 (1.0 - kRadiusVa │ │ │ │ + 0x00df8740 72202a20 302e3520 2b206b52 61646975 r * 0.5 + kRadiu │ │ │ │ + 0x00df8750 73566172 202a2048 61736828 63656c6c sVar * Hash(cell │ │ │ │ + 0x00df8760 202b2033 2e372929 3b200a20 20202066 + 3.7)); . f │ │ │ │ + 0x00df8770 6c6f6174 2064203d 206c656e 67746828 loat d = length( │ │ │ │ + 0x00df8780 746f4365 6e746572 293b200a 20202020 toCenter); . │ │ │ │ + 0x00df8790 666c6f61 74206161 203d206d 61782866 float aa = max(f │ │ │ │ + 0x00df87a0 77696474 68287078 2e78292c 20667769 width(px.x), fwi │ │ │ │ + 0x00df87b0 64746828 70782e79 29293b20 0a202020 dth(px.y)); . │ │ │ │ + 0x00df87c0 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ + 0x00df87d0 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ + 0x00df87e0 65702872 61646975 73202d20 61612c20 ep(radius - aa, │ │ │ │ + 0x00df87f0 72616469 7573202b 2061612c 2064293b radius + aa, d); │ │ │ │ + 0x00df8800 200a2020 2020636f 6c6f722e 72676220 . color.rgb │ │ │ │ + 0x00df8810 3d204d6f 64756c61 74654279 50617474 = ModulateByPatt │ │ │ │ + 0x00df8820 65726e44 6f747328 636f6c6f 722e7267 ernDots(color.rg │ │ │ │ + 0x00df8830 622c206b 4461726b 656e2c20 636f7665 b, kDarken, cove │ │ │ │ + 0x00df8840 72616765 293b200a 20202020 636f6c6f rage); . colo │ │ │ │ + 0x00df8850 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ + 0x00df8860 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00df8870 6f72203d 20636f6c 6f723b20 0a20207d or = color; . } │ │ │ │ + 0x00df8880 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00df8890 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df88a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df88b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df88c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df88d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df88e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df88f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df8900 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df8910 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df8920 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df8930 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df8940 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df8950 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df8960 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df8970 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df8980 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df8990 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df89a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df89b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df89c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df89d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df89e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df89f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00df8a00 7264733b 200a2020 696e2076 65633220 rds; . in vec2 │ │ │ │ + 0x00df8a10 765f6d61 736b5465 78436f6f 7264733b v_maskTexCoords; │ │ │ │ + 0x00df8a20 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00df8a30 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00df8a40 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00df8a50 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00df8a60 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00df8a70 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00df8a80 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00df8a90 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00df8aa0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00df8ab0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00df8ac0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00df8ad0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00df8ae0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00df8af0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00df8b00 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00df8b10 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00df8b20 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00df8b30 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00df8b40 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00df8b50 65783b20 0a202075 6e69666f 726d2073 ex; . uniform s │ │ │ │ + 0x00df8b60 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00df8b70 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00df8b80 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00df8b90 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00df8ba0 20204c4f 575f5020 76656333 204d6f64 LOW_P vec3 Mod │ │ │ │ + 0x00df8bb0 756c6174 65427950 61747465 726e446f ulateByPatternDo │ │ │ │ + 0x00df8bc0 7473284c 4f575f50 20766563 3320636f ts(LOW_P vec3 co │ │ │ │ + 0x00df8bd0 6c6f722c 20666c6f 61742064 61726b65 lor, float darke │ │ │ │ + 0x00df8be0 6e2c2066 6c6f6174 20636f76 65726167 n, float coverag │ │ │ │ + 0x00df8bf0 6529200a 20207b20 0a202020 20636f6e e) . { . con │ │ │ │ + 0x00df8c00 73742066 6c6f6174 206b4c69 67687465 st float kLighte │ │ │ │ + 0x00df8c10 6e203d20 302e3037 353b200a 20202020 n = 0.075; . │ │ │ │ + 0x00df8c20 69662028 646f7428 636f6c6f 722c2076 if (dot(color, v │ │ │ │ + 0x00df8c30 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00df8c40 35322c20 302e3037 32322929 203c2030 52, 0.0722)) < 0 │ │ │ │ + 0x00df8c50 2e352920 0a202020 20202072 65747572 .5) . retur │ │ │ │ + 0x00df8c60 6e20636f 6c6f7220 2b20636f 76657261 n color + covera │ │ │ │ + 0x00df8c70 6765202a 206b4c69 67687465 6e3b200a ge * kLighten; . │ │ │ │ + 0x00df8c80 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00df8c90 202a206d 69782831 2e302c20 6461726b * mix(1.0, dark │ │ │ │ + 0x00df8ca0 656e2c20 636f7665 72616765 293b200a en, coverage); . │ │ │ │ + 0x00df8cb0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00df8cc0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00df8cd0 34206669 6e616c43 6f6c6f72 203d2074 4 finalColor = t │ │ │ │ + 0x00df8ce0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00df8cf0 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00df8d00 72647329 202a2074 65787475 72652875 rds) * texture(u │ │ │ │ + 0x00df8d10 5f6d6173 6b546578 2c20765f 6d61736b _maskTex, v_mask │ │ │ │ + 0x00df8d20 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ + 0x00df8d30 2066696e 616c436f 6c6f722e 61202a3d finalColor.a *= │ │ │ │ + 0x00df8d40 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00df8d50 20765f46 72616743 6f6c6f72 203d2066 v_FragColor = f │ │ │ │ + 0x00df8d60 696e616c 436f6c6f 723b200a 20207d20 inalColor; . } │ │ │ │ + 0x00df8d70 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00df8d80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df8d90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df8da0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df8db0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df8dc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df8dd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df8de0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df8df0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df8e00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df8e10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df8e20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df8e30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df8e40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df8e50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df8e60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df8e70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df8e80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df8e90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df8ea0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df8eb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df8ec0 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ + 0x00df8ed0 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ + 0x00df8ee0 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ + 0x00df8ef0 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ + 0x00df8f00 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ + 0x00df8f10 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ + 0x00df8f20 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ + 0x00df8f30 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ + 0x00df8f40 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ + 0x00df8f50 726d2076 65633420 755f7465 78747572 rm vec4 u_textur │ │ │ │ + 0x00df8f60 65526563 744d696e 4d61785b 54494c45 eRectMinMax[TILE │ │ │ │ + 0x00df8f70 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ + 0x00df8f80 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ + 0x00df8f90 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ + 0x00df8fa0 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ + 0x00df8fb0 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ + 0x00df8fc0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00df8fd0 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00df8fe0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00df8ff0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00df9000 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00df9010 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00df9020 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00df9030 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00df9040 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00df9050 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00df9060 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00df9070 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00df9080 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00df9090 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00df90a0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00df90b0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00df90c0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00df90d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00df90e0 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00df90f0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00df9100 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00df9110 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00df9120 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00df9130 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00df9140 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00df9150 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00df9160 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00df9170 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00df9180 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00df9190 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00df91a0 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00df91b0 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00df91c0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00df91d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df91e0 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00df91f0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00df9200 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00df9210 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00df9220 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00df9230 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00df9240 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00df9250 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00df9260 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00df9270 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00df9280 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00df9290 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00df92a0 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00df92b0 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00df92c0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00df92d0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00df92e0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00df92f0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00df9300 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00df9310 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00df9320 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00df9330 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00df9340 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00df9350 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00df9360 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00df9370 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00df9380 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00df9390 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00df93a0 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00df93b0 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00df93c0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00df93d0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00df93e0 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00df93f0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00df9400 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00df9410 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00df9420 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00df9430 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00df9440 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00df9450 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00df9460 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00df9470 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00df9480 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00df9490 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00df94a0 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00df94b0 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00df94c0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00df94d0 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00df94e0 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00df94f0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00df9500 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00df9510 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00df9520 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00df9530 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00df9540 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00df9550 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00df9560 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00df9570 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00df9580 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00df9590 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00df95a0 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00df95b0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00df95c0 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ + 0x00df95d0 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ + 0x00df95e0 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ + 0x00df95f0 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ + 0x00df9600 293b200a 20202020 76656334 2074696c ); . vec4 til │ │ │ │ + 0x00df9610 65436f6f 7264734d 696e4d61 78203d20 eCoordsMinMax = │ │ │ │ + 0x00df9620 755f7469 6c65436f 6f726473 4d696e4d u_tileCoordsMinM │ │ │ │ + 0x00df9630 61785b67 6c5f496e 7374616e 63654944 ax[gl_InstanceID │ │ │ │ + 0x00df9640 5d3b200a 20202020 76656332 20776f72 ]; . vec2 wor │ │ │ │ + 0x00df9650 6c64506f 73203d20 6d697828 74696c65 ldPos = mix(tile │ │ │ │ + 0x00df9660 436f6f72 64734d69 6e4d6178 2e78792c CoordsMinMax.xy, │ │ │ │ + 0x00df9670 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ + 0x00df9680 782e7a77 2c207175 61645665 72746578 x.zw, quadVertex │ │ │ │ + 0x00df9690 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00df96a0 203d2076 65633428 776f726c 64506f73 = vec4(worldPos │ │ │ │ + 0x00df96b0 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00df96c0 6d6f6465 6c566965 77202a20 755f7072 modelView * u_pr │ │ │ │ + 0x00df96d0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00df96e0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00df96f0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00df9700 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00df9710 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00df9720 20202076 65633420 74657874 75726552 vec4 textureR │ │ │ │ + 0x00df9730 6563744d 696e4d61 78203d20 755f7465 ectMinMax = u_te │ │ │ │ + 0x00df9740 78747572 65526563 744d696e 4d61785b xtureRectMinMax[ │ │ │ │ + 0x00df9750 676c5f49 6e737461 6e636549 445d3b20 gl_InstanceID]; │ │ │ │ + 0x00df9760 0a202020 20766563 32207465 78555620 . vec2 texUV │ │ │ │ + 0x00df9770 3d206d69 78287465 78747572 65526563 = mix(textureRec │ │ │ │ + 0x00df9780 744d696e 4d61782e 78792c20 74657874 tMinMax.xy, text │ │ │ │ + 0x00df9790 75726552 6563744d 696e4d61 782e7a77 ureRectMinMax.zw │ │ │ │ + 0x00df97a0 2c207175 61645665 72746578 293b200a , quadVertex); . │ │ │ │ + 0x00df97b0 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ + 0x00df97c0 3d207665 63332874 65785556 2c20666c = vec3(texUV, fl │ │ │ │ + 0x00df97d0 6f617428 755f7465 78747572 65496e64 oat(u_textureInd │ │ │ │ + 0x00df97e0 65785b67 6c5f496e 7374616e 63654944 ex[gl_InstanceID │ │ │ │ + 0x00df97f0 5d29293b 200a2020 7d200a00 00000000 ])); . } ...... │ │ │ │ + 0x00df9800 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00df9810 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00df9820 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00df9830 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00df9840 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00df9850 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00df9860 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00df9870 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00df9880 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00df9890 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00df98a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00df98b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00df98c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00df98d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00df98e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00df98f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00df9900 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00df9910 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00df9920 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00df9930 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00df9940 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00df9950 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00df9960 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00df9970 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00df9980 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00df9990 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00df99a0 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00df99b0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00df99c0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00df99d0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00df99e0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00df99f0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00df9a00 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00df9a10 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00df9a20 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00df9a30 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00df9a40 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00df9a50 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00df9a60 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00df9a70 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00df9a80 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00df9a90 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00df9aa0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00df9ab0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00df9ac0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00df9ad0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00df9ae0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00df9af0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00df9b00 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00df9b10 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00df9b20 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00df9b30 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ + 0x00df9b40 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ + 0x00df9b50 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ + 0x00df9b60 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00df9b70 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00df9b80 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00df9b90 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00df9ba0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00df9bb0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00df9bc0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00df9bd0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00df9be0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00df9bf0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00df9c00 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00df9c10 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00df9c20 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00df9c30 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00df9c40 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00df9c50 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00df9c60 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00df9c70 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00df9c80 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00df9c90 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00df9ca0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00df9cb0 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00df9cc0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00df9cd0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00df9ce0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00df9cf0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00df9d00 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00df9d10 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00df9d20 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00df9d30 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00df9d40 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00df9d50 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00df9d60 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00df9d70 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00df9d80 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00df9d90 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00df9da0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00df9db0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00df9dc0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00df9dd0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00df9de0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00df9df0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00df9e00 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00df9e10 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00df9e20 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00df9e30 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00df9e40 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00df9e50 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00df9e60 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00df9e70 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00df9e80 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00df9e90 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00df9ea0 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00df9eb0 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00df9ec0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00df9ed0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00df9ee0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00df9ef0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00df9f00 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00df9f10 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00df9f20 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00df9f30 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00df9f40 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00df9f50 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00df9f60 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00df9f70 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00df9f80 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00df9f90 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00df9fa0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00df9fb0 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00df9fc0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00df9fd0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00df9fe0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00df9ff0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00dfa000 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00dfa010 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00dfa020 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00dfa030 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00dfa040 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00dfa050 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00dfa060 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00dfa070 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00dfa080 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00dfa090 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00dfa0a0 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00dfa0b0 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00dfa0c0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00dfa0d0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00dfa0e0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00dfa0f0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00dfa100 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00dfa110 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00dfa120 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ + 0x00dfa130 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ + 0x00dfa140 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ + 0x00dfa150 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ + 0x00dfa160 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ + 0x00dfa170 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00dfa180 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00dfa190 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ + 0x00dfa1a0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00dfa1b0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00dfa1c0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00dfa1d0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00dfa1e0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00dfa1f0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00dfa200 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00dfa210 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00dfa220 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00dfa230 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00dfa240 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00dfa250 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ + 0x00dfa260 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ + 0x00dfa270 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00dfa280 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfa290 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfa2a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfa2b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfa2c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfa2d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfa2e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfa2f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfa300 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfa310 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfa320 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfa330 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfa340 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfa350 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfa360 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfa370 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfa380 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfa390 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfa3a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfa3b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfa3c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfa3d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00dfa3e0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00dfa3f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00dfa400 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00dfa410 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00dfa420 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00dfa430 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ + 0x00dfa440 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ + 0x00dfa450 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00dfa460 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00dfa470 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00dfa480 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00dfa490 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00dfa4a0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00dfa4b0 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ + 0x00dfa4c0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00dfa4d0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00dfa4e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00dfa4f0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ + 0x00dfa500 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00dfa510 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ + 0x00dfa520 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00dfa530 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ + 0x00dfa540 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00dfa550 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00dfa560 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00dfa570 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00dfa580 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00dfa590 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00dfa5a0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00dfa5b0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00dfa5c0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00dfa5d0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00dfa5e0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00dfa5f0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00dfa600 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00dfa610 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dfa620 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00dfa630 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00dfa640 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00dfa650 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00dfa660 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00dfa670 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00dfa680 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00dfa690 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00dfa6a0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00dfa6b0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00dfa6c0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00dfa6d0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00dfa6e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dfa6f0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00dfa700 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00dfa710 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dfa720 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00dfa730 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00dfa740 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00dfa750 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00dfa760 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00dfa770 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00dfa780 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00dfa790 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00dfa7a0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00dfa7b0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00dfa7c0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00dfa7d0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00dfa7e0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00dfa7f0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00dfa800 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00dfa810 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00dfa820 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00dfa830 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00dfa840 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00dfa850 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00dfa860 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00dfa870 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00dfa880 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00dfa890 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00dfa8a0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00dfa8b0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00dfa8c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dfa8d0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00dfa8e0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00dfa8f0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00dfa900 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00dfa910 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00dfa920 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00dfa930 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00dfa940 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00dfa950 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00dfa960 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00dfa970 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00dfa980 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00dfa990 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00dfa9a0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00dfa9b0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00dfa9c0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00dfa9d0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00dfa9e0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00dfa9f0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00dfaa00 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00dfaa10 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00dfaa20 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00dfaa30 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00dfaa40 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00dfaa50 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00dfaa60 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00dfaa70 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00dfaa80 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00dfaa90 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00dfaaa0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00dfaab0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00dfaac0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00dfaad0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00dfaae0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00dfaaf0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00dfab00 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ + 0x00dfab10 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ + 0x00dfab20 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ + 0x00dfab30 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ + 0x00dfab40 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ + 0x00dfab50 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ + 0x00dfab60 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00dfab70 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ + 0x00dfab80 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ + 0x00dfab90 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ + 0x00dfaba0 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ + 0x00dfabb0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00dfabc0 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ + 0x00dfabd0 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ + 0x00dfabe0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00dfabf0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00dfac00 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00dfac10 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00dfac20 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00dfac30 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ + 0x00dfac40 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ + 0x00dfac50 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ + 0x00dfac60 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00dfac70 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ + 0x00dfac80 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ + 0x00dfac90 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00dfaca0 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ + 0x00dfacb0 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ + 0x00dfacc0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dfacd0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dface0 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00dfacf0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ + 0x00dfad00 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ + 0x00dfad10 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ + 0x00dfad20 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ + 0x00dfad30 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ + 0x00dfad40 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ + 0x00dfad50 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ + 0x00dfad60 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ + 0x00dfad70 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00dfad80 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ + 0x00dfad90 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ + 0x00dfada0 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ + 0x00dfadb0 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ + 0x00dfadc0 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ + 0x00dfadd0 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ + 0x00dfade0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00dfadf0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00dfae00 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00dfae10 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00dfae20 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00dfae30 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00dfae40 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00dfae50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfae60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfae70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfae80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfae90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfaea0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfaeb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfaec0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfaed0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfaee0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfaef0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfaf00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfaf10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfaf20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfaf30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfaf40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfaf50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfaf60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfaf70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfaf80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfaf90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfafa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfafb0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00dfafc0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00dfafd0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00dfafe0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00dfaff0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00dfb000 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00dfb010 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ + 0x00dfb020 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ + 0x00dfb030 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ + 0x00dfb040 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ + 0x00dfb050 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00dfb060 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00dfb070 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00dfb080 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00dfb090 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00dfb0a0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00dfb0b0 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ + 0x00dfb0c0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00dfb0d0 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ + 0x00dfb0e0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00dfb0f0 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ + 0x00dfb100 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00dfb110 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ + 0x00dfb120 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00dfb130 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ + 0x00dfb140 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00dfb150 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ + 0x00dfb160 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ + 0x00dfb170 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ + 0x00dfb180 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00dfb190 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00dfb1a0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00dfb1b0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00dfb1c0 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00dfb1d0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00dfb1e0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00dfb1f0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00dfb200 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00dfb210 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00dfb220 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00dfb230 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00dfb240 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00dfb250 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00dfb260 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00dfb270 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00dfb280 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00dfb290 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00dfb2a0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00dfb2b0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00dfb2c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dfb2d0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00dfb2e0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00dfb2f0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00dfb300 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00dfb310 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00dfb320 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00dfb330 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00dfb340 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00dfb350 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00dfb360 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00dfb370 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00dfb380 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00dfb390 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00dfb3a0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00dfb3b0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00dfb3c0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00dfb3d0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00dfb3e0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00dfb3f0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00dfb400 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00dfb410 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00dfb420 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00dfb430 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00dfb440 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00dfb450 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00dfb460 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00dfb470 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00dfb480 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00dfb490 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00dfb4a0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00dfb4b0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00dfb4c0 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00dfb4d0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00dfb4e0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00dfb4f0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00dfb500 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00dfb510 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00dfb520 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00dfb530 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00dfb540 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00dfb550 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00dfb560 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00dfb570 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00dfb580 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00dfb590 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00dfb5a0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00dfb5b0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00dfb5c0 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00dfb5d0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00dfb5e0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00dfb5f0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00dfb600 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00dfb610 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00dfb620 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00dfb630 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00dfb640 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00dfb650 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00dfb660 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00dfb670 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00dfb680 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00dfb690 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00dfb6a0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00dfb6b0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00dfb6c0 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00dfb6d0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00dfb6e0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00dfb6f0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00dfb700 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00dfb710 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00dfb720 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ + 0x00dfb730 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ + 0x00dfb740 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00dfb750 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00dfb760 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00dfb770 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00dfb780 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00dfb790 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00dfb7a0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00dfb7b0 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00dfb7c0 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00dfb7d0 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ + 0x00dfb7e0 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ + 0x00dfb7f0 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ + 0x00dfb800 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ + 0x00dfb810 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ + 0x00dfb820 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00dfb830 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ + 0x00dfb840 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00dfb850 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00dfb860 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00dfb870 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00dfb880 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00dfb890 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ + 0x00dfb8a0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dfb8b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dfb8c0 20202020 20202020 20202020 20755f6d u_m │ │ │ │ + 0x00dfb8d0 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ + 0x00dfb8e0 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ + 0x00dfb8f0 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ + 0x00dfb900 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ + 0x00dfb910 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ + 0x00dfb920 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ + 0x00dfb930 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ + 0x00dfb940 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ + 0x00dfb950 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ + 0x00dfb960 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00dfb970 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ + 0x00dfb980 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ + 0x00dfb990 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ + 0x00dfb9a0 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ + 0x00dfb9b0 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ + 0x00dfb9c0 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ + 0x00dfb9d0 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ + 0x00dfb9e0 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ + 0x00dfb9f0 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ + 0x00dfba00 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ + 0x00dfba10 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00dfba20 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ + 0x00dfba30 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ + 0x00dfba40 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ + 0x00dfba50 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ + 0x00dfba60 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ + 0x00dfba70 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ + 0x00dfba80 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00dfba90 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ + 0x00dfbaa0 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00dfbab0 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ + 0x00dfbac0 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ + 0x00dfbad0 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ + 0x00dfbae0 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ + 0x00dfbaf0 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ + 0x00dfbb00 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00dfbb10 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ + 0x00dfbb20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfbb30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfbb40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfbb50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfbb60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfbb70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfbb80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfbb90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfbba0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfbbb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfbbc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfbbd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfbbe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfbbf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfbc00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfbc10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfbc20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfbc30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfbc40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfbc50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfbc60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfbc70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00dfbc80 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00dfbc90 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ + 0x00dfbca0 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ + 0x00dfbcb0 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ + 0x00dfbcc0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00dfbcd0 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ + 0x00dfbce0 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00dfbcf0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00dfbd00 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00dfbd10 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ + 0x00dfbd20 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ + 0x00dfbd30 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00dfbd40 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00dfbd50 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00dfbd60 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00dfbd70 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00dfbd80 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00dfbd90 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00dfbda0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00dfbdb0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00dfbdc0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00dfbdd0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00dfbde0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00dfbdf0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00dfbe00 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00dfbe10 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dfbe20 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00dfbe30 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ + 0x00dfbe40 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ + 0x00dfbe50 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00dfbe60 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ + 0x00dfbe70 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00dfbe80 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00dfbe90 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00dfbea0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00dfbeb0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00dfbec0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00dfbed0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00dfbee0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00dfbef0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00dfbf00 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00dfbf10 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00dfbf20 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00dfbf30 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00dfbf40 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00dfbf50 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00dfbf60 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00dfbf70 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00dfbf80 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00dfbf90 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00dfbfa0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00dfbfb0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00dfbfc0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00dfbfd0 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00dfbfe0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00dfbff0 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00dfc000 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00dfc010 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00dfc020 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dfc030 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00dfc040 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00dfc050 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00dfc060 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00dfc070 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00dfc080 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00dfc090 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00dfc0a0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00dfc0b0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00dfc0c0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00dfc0d0 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00dfc0e0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00dfc0f0 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00dfc100 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00dfc110 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00dfc120 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00dfc130 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00dfc140 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00dfc150 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00dfc160 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00dfc170 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00dfc180 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00dfc190 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00dfc1a0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00dfc1b0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00dfc1c0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00dfc1d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dfc1e0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00dfc1f0 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00dfc200 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00dfc210 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00dfc220 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00dfc230 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00dfc240 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00dfc250 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00dfc260 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00dfc270 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00dfc280 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00dfc290 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00dfc2a0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00dfc2b0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00dfc2c0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00dfc2d0 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00dfc2e0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00dfc2f0 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00dfc300 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00dfc310 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00dfc320 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00dfc330 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00dfc340 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00dfc350 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00dfc360 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00dfc370 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00dfc380 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00dfc390 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00dfc3a0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00dfc3b0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00dfc3c0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00dfc3d0 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00dfc3e0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00dfc3f0 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00dfc400 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00dfc410 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00dfc420 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00dfc430 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ + 0x00dfc440 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00dfc450 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00dfc460 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ + 0x00dfc470 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ + 0x00dfc480 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00dfc490 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00dfc4a0 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00dfc4b0 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00dfc4c0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00dfc4d0 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ + 0x00dfc4e0 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ + 0x00dfc4f0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00dfc500 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00dfc510 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00dfc520 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ + 0x00dfc530 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ + 0x00dfc540 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00dfc550 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfc560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfc570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfc580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfc590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfc5a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfc5b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfc5c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfc5d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfc5e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfc5f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfc600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfc610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfc620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfc630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfc640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfc650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfc660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfc670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfc680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfc690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfc6a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfc6b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00dfc6c0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00dfc6d0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00dfc6e0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00dfc6f0 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ + 0x00dfc700 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ + 0x00dfc710 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ + 0x00dfc720 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00dfc730 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00dfc740 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00dfc750 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00dfc760 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00dfc770 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00dfc780 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ + 0x00dfc790 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ + 0x00dfc7a0 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ + 0x00dfc7b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dfc7c0 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ + 0x00dfc7d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00dfc7e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00dfc7f0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00dfc800 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00dfc810 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00dfc820 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00dfc830 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00dfc840 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00dfc850 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00dfc860 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00dfc870 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00dfc880 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00dfc890 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00dfc8a0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00dfc8b0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00dfc8c0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00dfc8d0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00dfc8e0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00dfc8f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00dfc900 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00dfc910 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00dfc920 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00dfc930 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00dfc940 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00dfc950 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00dfc960 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00dfc970 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00dfc980 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00dfc990 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00dfc9a0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00dfc9b0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00dfc9c0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00dfc9d0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00dfc9e0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00dfc9f0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00dfca00 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00dfca10 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00dfca20 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00dfca30 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00dfca40 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00dfca50 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00dfca60 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00dfca70 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00dfca80 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00dfca90 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00dfcaa0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00dfcab0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00dfcac0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00dfcad0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00dfcae0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00dfcaf0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00dfcb00 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00dfcb10 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00dfcb20 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00dfcb30 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00dfcb40 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00dfcb50 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00dfcb60 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00dfcb70 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00dfcb80 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00dfcb90 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00dfcba0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00dfcbb0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00dfcbc0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00dfcbd0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00dfcbe0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00dfcbf0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00dfcc00 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00dfcc10 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00dfcc20 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00dfcc30 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00dfcc40 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00dfcc50 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00dfcc60 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00dfcc70 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00dfcc80 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00dfcc90 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00dfcca0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00dfccb0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00dfccc0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00dfccd0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00dfcce0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00dfccf0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00dfcd00 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00dfcd10 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00dfcd20 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00dfcd30 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00dfcd40 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00dfcd50 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00dfcd60 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00dfcd70 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ + 0x00dfcd80 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ + 0x00dfcd90 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00dfcda0 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ + 0x00dfcdb0 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ + 0x00dfcdc0 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ + 0x00dfcdd0 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ + 0x00dfcde0 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ + 0x00dfcdf0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dfce00 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ + 0x00dfce10 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ + 0x00dfce20 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ + 0x00dfce30 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ + 0x00dfce40 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ + 0x00dfce50 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ + 0x00dfce60 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ + 0x00dfce70 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ + 0x00dfce80 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ + 0x00dfce90 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ + 0x00dfcea0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00dfceb0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00dfcec0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00dfced0 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ + 0x00dfcee0 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ + 0x00dfcef0 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ + 0x00dfcf00 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ + 0x00dfcf10 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ + 0x00dfcf20 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ + 0x00dfcf30 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ + 0x00dfcf40 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ + 0x00dfcf50 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ + 0x00dfcf60 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00dfcf70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfcf80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfcf90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfcfa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfcfb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfcfc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfcfd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfcfe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfcff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfd000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfd010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfd020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfd030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfd040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfd050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfd060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfd070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfd080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfd090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfd0a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfd0b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfd0c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfd0d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00dfd0e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00dfd0f0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00dfd100 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00dfd110 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ + 0x00dfd120 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00dfd130 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00dfd140 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00dfd150 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00dfd160 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00dfd170 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00dfd180 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00dfd190 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00dfd1a0 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ + 0x00dfd1b0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00dfd1c0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00dfd1d0 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ + 0x00dfd1e0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00dfd1f0 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ + 0x00dfd200 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00dfd210 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ + 0x00dfd220 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00dfd230 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ + 0x00dfd240 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00dfd250 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ + 0x00dfd260 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ + 0x00dfd270 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ + 0x00dfd280 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00dfd290 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ + 0x00dfd2a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00dfd2b0 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ + 0x00dfd2c0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00dfd2d0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00dfd2e0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00dfd2f0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00dfd300 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00dfd310 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00dfd320 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00dfd330 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00dfd340 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00dfd350 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00dfd360 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00dfd370 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00dfd380 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00dfd390 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dfd3a0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00dfd3b0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00dfd3c0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00dfd3d0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00dfd3e0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00dfd3f0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00dfd400 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00dfd410 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00dfd420 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00dfd430 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00dfd440 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00dfd450 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00dfd460 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00dfd470 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00dfd480 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00dfd490 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dfd4a0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00dfd4b0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00dfd4c0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00dfd4d0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00dfd4e0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00dfd4f0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00dfd500 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00dfd510 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00dfd520 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00dfd530 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00dfd540 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00dfd550 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00dfd560 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00dfd570 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00dfd580 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00dfd590 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00dfd5a0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00dfd5b0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00dfd5c0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00dfd5d0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00dfd5e0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00dfd5f0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00dfd600 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00dfd610 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00dfd620 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00dfd630 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00dfd640 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00dfd650 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00dfd660 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00dfd670 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00dfd680 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00dfd690 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00dfd6a0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00dfd6b0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00dfd6c0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00dfd6d0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00dfd6e0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00dfd6f0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00dfd700 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00dfd710 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00dfd720 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00dfd730 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00dfd740 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00dfd750 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00dfd760 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00dfd770 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00dfd780 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00dfd790 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00dfd7a0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00dfd7b0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00dfd7c0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00dfd7d0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00dfd7e0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00dfd7f0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00dfd800 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00dfd810 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00dfd820 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00dfd830 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00dfd840 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00dfd850 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00dfd860 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00dfd870 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00dfd880 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ + 0x00dfd890 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ + 0x00dfd8a0 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00dfd8b0 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ + 0x00dfd8c0 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ + 0x00dfd8d0 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ + 0x00dfd8e0 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ + 0x00dfd8f0 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ + 0x00dfd900 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dfd910 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ + 0x00dfd920 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ + 0x00dfd930 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ + 0x00dfd940 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ + 0x00dfd950 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ + 0x00dfd960 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ + 0x00dfd970 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ + 0x00dfd980 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ + 0x00dfd990 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00dfd9a0 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ + 0x00dfd9b0 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ + 0x00dfd9c0 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ + 0x00dfd9d0 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ + 0x00dfd9e0 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ + 0x00dfd9f0 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ + 0x00dfda00 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ + 0x00dfda10 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00dfda20 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00dfda30 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00dfda40 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00dfda50 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00dfda60 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00dfda70 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ + 0x00dfda80 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ + 0x00dfda90 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ + 0x00dfdaa0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00dfdab0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfdac0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfdad0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfdae0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfdaf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfdb00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfdb10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfdb20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfdb30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfdb40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfdb50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfdb60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfdb70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfdb80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfdb90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfdba0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfdbb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfdbc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfdbd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfdbe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfdbf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfdc00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfdc10 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00dfdc20 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00dfdc30 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00dfdc40 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00dfdc50 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00dfdc60 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00dfdc70 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00dfdc80 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00dfdc90 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00dfdca0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00dfdcb0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00dfdcc0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00dfdcd0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00dfdce0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00dfdcf0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00dfdd00 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00dfdd10 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00dfdd20 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00dfdd30 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00dfdd40 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00dfdd50 200a2020 756e6966 6f726d20 73616d70 . uniform samp │ │ │ │ + 0x00dfdd60 6c657232 4420755f 636f6c6f 72546578 ler2D u_colorTex │ │ │ │ + 0x00dfdd70 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00dfdd80 706c6572 32442075 5f6d6173 6b546578 pler2D u_maskTex │ │ │ │ + 0x00dfdd90 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00dfdda0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00dfddb0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00dfddc0 4c4f575f 50207665 6333204d 6f64756c LOW_P vec3 Modul │ │ │ │ + 0x00dfddd0 61746542 79506174 7465726e 446f7473 ateByPatternDots │ │ │ │ + 0x00dfdde0 284c4f57 5f502076 65633320 636f6c6f (LOW_P vec3 colo │ │ │ │ + 0x00dfddf0 722c2066 6c6f6174 20646172 6b656e2c r, float darken, │ │ │ │ + 0x00dfde00 20666c6f 61742063 6f766572 61676529 float coverage) │ │ │ │ + 0x00dfde10 200a2020 7b200a20 20202063 6f6e7374 . { . const │ │ │ │ + 0x00dfde20 20666c6f 6174206b 4c696768 74656e20 float kLighten │ │ │ │ + 0x00dfde30 3d20302e 3037353b 200a2020 20206966 = 0.075; . if │ │ │ │ + 0x00dfde40 2028646f 7428636f 6c6f722c 20766563 (dot(color, vec │ │ │ │ + 0x00dfde50 3328302e 32313236 2c20302e 37313532 3(0.2126, 0.7152 │ │ │ │ + 0x00dfde60 2c20302e 30373232 2929203c 20302e35 , 0.0722)) < 0.5 │ │ │ │ + 0x00dfde70 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00dfde80 636f6c6f 72202b20 636f7665 72616765 color + coverage │ │ │ │ + 0x00dfde90 202a206b 4c696768 74656e3b 200a2020 * kLighten; . │ │ │ │ + 0x00dfdea0 20207265 7475726e 20636f6c 6f72202a return color * │ │ │ │ + 0x00dfdeb0 206d6978 28312e30 2c206461 726b656e mix(1.0, darken │ │ │ │ + 0x00dfdec0 2c20636f 76657261 6765293b 200a2020 , coverage); . │ │ │ │ + 0x00dfded0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00dfdee0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00dfdef0 636f6c6f 72203d20 74657874 75726528 color = texture( │ │ │ │ + 0x00dfdf00 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ + 0x00dfdf10 6c6f7254 6578436f 6f726429 3b200a20 lorTexCoord); . │ │ │ │ + 0x00dfdf20 20202066 6c6f6174 206d6173 6b203d20 float mask = │ │ │ │ + 0x00dfdf30 74657874 75726528 755f6d61 736b5465 texture(u_maskTe │ │ │ │ + 0x00dfdf40 782c2076 5f6d6173 6b546578 436f6f72 x, v_maskTexCoor │ │ │ │ + 0x00dfdf50 64292e72 3b200a20 20202063 6f6c6f72 d).r; . color │ │ │ │ + 0x00dfdf60 2e61203d 20636f6c 6f722e61 202a206d .a = color.a * m │ │ │ │ + 0x00dfdf70 61736b20 2a20755f 6f706163 6974793b ask * u_opacity; │ │ │ │ + 0x00dfdf80 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ + 0x00dfdf90 72203d20 636f6c6f 723b200a 20207d20 r = color; . } │ │ │ │ + 0x00dfdfa0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfdfb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfdfc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfdfd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfdfe0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfdff0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfe000 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfe010 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfe020 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfe030 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfe040 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfe050 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfe060 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfe070 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfe080 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfe090 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfe0a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfe0b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfe0c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfe0d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfe0e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfe0f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfe100 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00dfe110 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00dfe120 6f6c6f72 5465783b 200a2020 696e2076 olorTex; . in v │ │ │ │ + 0x00dfe130 65633320 765f7465 78436f6f 7264733b ec3 v_texCoords; │ │ │ │ + 0x00dfe140 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00dfe150 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00dfe160 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00dfe170 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00dfe180 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ + 0x00dfe190 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ + 0x00dfe1a0 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ + 0x00dfe1b0 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ + 0x00dfe1c0 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ + 0x00dfe1d0 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ + 0x00dfe1e0 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ + 0x00dfe1f0 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ + 0x00dfe200 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ + 0x00dfe210 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ + 0x00dfe220 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ + 0x00dfe230 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ + 0x00dfe240 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ + 0x00dfe250 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ + 0x00dfe260 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ + 0x00dfe270 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ + 0x00dfe280 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ + 0x00dfe290 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ + 0x00dfe2a0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00dfe2b0 20202076 5f467261 67436f6c 6f72203d v_FragColor = │ │ │ │ + 0x00dfe2c0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00dfe2d0 5465782c 20765f74 6578436f 6f726473 Tex, v_texCoords │ │ │ │ + 0x00dfe2e0 2e787929 3b200a20 207d200a 00000000 .xy); . } ..... │ │ │ │ + 0x00dfe2f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfe300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfe310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfe320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfe330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfe340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfe350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfe360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfe370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfe380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfe390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfe3a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfe3b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfe3c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfe3d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfe3e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfe3f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfe400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfe410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfe420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfe430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfe440 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfe450 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00dfe460 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00dfe470 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00dfe480 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00dfe490 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00dfe4a0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00dfe4b0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00dfe4c0 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00dfe4d0 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00dfe4e0 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00dfe4f0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00dfe500 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00dfe510 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00dfe520 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00dfe530 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00dfe540 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00dfe550 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00dfe560 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00dfe570 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00dfe580 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00dfe590 203d2031 3030302e 303b200a 20204c4f = 1000.0; . LO │ │ │ │ + 0x00dfe5a0 575f5020 76656333 204d6f64 756c6174 W_P vec3 Modulat │ │ │ │ + 0x00dfe5b0 65427950 61747465 726e446f 7473284c eByPatternDots(L │ │ │ │ + 0x00dfe5c0 4f575f50 20766563 3320636f 6c6f722c OW_P vec3 color, │ │ │ │ + 0x00dfe5d0 20666c6f 61742064 61726b65 6e2c2066 float darken, f │ │ │ │ + 0x00dfe5e0 6c6f6174 20636f76 65726167 6529200a loat coverage) . │ │ │ │ + 0x00dfe5f0 20207b20 0a202020 20636f6e 73742066 { . const f │ │ │ │ + 0x00dfe600 6c6f6174 206b4c69 67687465 6e203d20 loat kLighten = │ │ │ │ + 0x00dfe610 302e3037 353b200a 20202020 69662028 0.075; . if ( │ │ │ │ + 0x00dfe620 646f7428 636f6c6f 722c2076 65633328 dot(color, vec3( │ │ │ │ + 0x00dfe630 302e3231 32362c20 302e3731 35322c20 0.2126, 0.7152, │ │ │ │ + 0x00dfe640 302e3037 32322929 203c2030 2e352920 0.0722)) < 0.5) │ │ │ │ + 0x00dfe650 0a202020 20202072 65747572 6e20636f . return co │ │ │ │ + 0x00dfe660 6c6f7220 2b20636f 76657261 6765202a lor + coverage * │ │ │ │ + 0x00dfe670 206b4c69 67687465 6e3b200a 20202020 kLighten; . │ │ │ │ + 0x00dfe680 72657475 726e2063 6f6c6f72 202a206d return color * m │ │ │ │ + 0x00dfe690 69782831 2e302c20 6461726b 656e2c20 ix(1.0, darken, │ │ │ │ + 0x00dfe6a0 636f7665 72616765 293b200a 20207d20 coverage); . } │ │ │ │ + 0x00dfe6b0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00dfe6c0 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ + 0x00dfe6d0 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ + 0x00dfe6e0 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00dfe6f0 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ + 0x00dfe700 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ + 0x00dfe710 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ + 0x00dfe720 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00dfe730 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ + 0x00dfe740 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00dfe750 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00dfe760 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dfe770 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dfe780 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dfe790 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dfe7a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dfe7b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dfe7c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dfe7d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dfe7e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dfe7f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dfe800 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dfe810 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dfe820 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dfe830 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dfe840 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dfe850 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dfe860 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dfe870 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dfe880 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dfe890 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dfe8a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dfe8b0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00dfe8c0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00dfe8d0 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00dfe8e0 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00dfe8f0 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00dfe900 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00dfe910 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00dfe920 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00dfe930 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00dfe940 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00dfe950 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00dfe960 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00dfe970 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00dfe980 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00dfe990 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00dfe9a0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00dfe9b0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00dfe9c0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00dfe9d0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00dfe9e0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00dfe9f0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00dfea00 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00dfea10 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00dfea20 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00dfea30 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00dfea40 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00dfea50 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00dfea60 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00dfea70 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00dfea80 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00dfea90 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00dfeaa0 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00dfeab0 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00dfeac0 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00dfead0 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ + 0x00dfeae0 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ + 0x00dfeaf0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00dfeb00 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00dfeb10 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00dfeb20 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00dfeb30 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00dfeb40 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00dfeb50 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00dfeb60 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00dfeb70 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00dfeb80 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00dfeb90 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00dfeba0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00dfebb0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00dfebc0 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00dfebd0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00dfebe0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00dfebf0 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00dfec00 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00dfec10 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00dfec20 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00dfec30 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00dfec40 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00dfec50 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00dfec60 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00dfec70 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00dfec80 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00dfec90 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00dfeca0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00dfecb0 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00dfecc0 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00dfecd0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00dfece0 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00dfecf0 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00dfed00 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00dfed10 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00dfed20 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00dfed30 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00dfed40 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00dfed50 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00dfed60 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00dfed70 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00dfed80 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00dfed90 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00dfeda0 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00dfedb0 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00dfedc0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00dfedd0 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00dfede0 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00dfedf0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00dfee00 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00dfee10 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00dfee20 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00dfee30 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00dfee40 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00dfee50 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00dfee60 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00dfee70 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00dfee80 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00dfee90 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00dfeea0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00dfeeb0 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00dfeec0 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00dfeed0 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00dfeee0 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00dfeef0 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00dfef00 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00dfef10 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00dfef20 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00dfef30 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00dfef40 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00dfef50 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00dfef60 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00dfef70 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00dfef80 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00dfef90 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00dfefa0 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00dfefb0 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00dfefc0 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00dfefd0 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00dfefe0 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00dfeff0 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00dff000 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00dff010 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00dff020 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00dff030 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00dff040 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00dff050 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00dff060 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00dff070 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00dff080 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ + 0x00dff090 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ + 0x00dff0a0 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ + 0x00dff0b0 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ + 0x00dff0c0 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ + 0x00dff0d0 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ + 0x00dff0e0 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ + 0x00dff0f0 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ + 0x00dff100 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ + 0x00dff110 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ + 0x00dff120 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00dff130 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ + 0x00dff140 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00dff150 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00dff160 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00dff170 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00dff180 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00dff190 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00dff1a0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00dff1b0 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00dff1c0 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00dff1d0 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00dff1e0 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00dff1f0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dff200 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00dff210 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00dff220 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00dff230 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00dff240 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ + 0x00dff250 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ + 0x00dff260 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ + 0x00dff270 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ + 0x00dff280 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ + 0x00dff290 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00dff2a0 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ + 0x00dff2b0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00dff2c0 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ + 0x00dff2d0 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00dff2e0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00dff2f0 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ + 0x00dff300 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00dff310 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ + 0x00dff320 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ + 0x00dff330 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ + 0x00dff340 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00dff350 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00dff360 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00dff370 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00dff380 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00dff390 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00dff3a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00dff3b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00dff3c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00dff3d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00dff3e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00dff3f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00dff400 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00dff410 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00dff420 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00dff430 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00dff440 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00dff450 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00dff460 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00dff470 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00dff480 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00dff490 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ + 0x00dff4a0 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ + 0x00dff4b0 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ + 0x00dff4c0 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ + 0x00dff4d0 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ + 0x00dff4e0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00dff4f0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00dff500 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ + 0x00dff510 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ + 0x00dff520 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00dff530 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00dff540 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00dff550 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ + 0x00dff560 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00dff570 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ + 0x00dff580 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ + 0x00dff590 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ + 0x00dff5a0 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ + 0x00dff5b0 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ + 0x00dff5c0 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ + 0x00dff5d0 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ + 0x00dff5e0 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ + 0x00dff5f0 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ + 0x00dff600 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ + 0x00dff610 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ + 0x00dff620 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ + 0x00dff630 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ + 0x00dff640 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ + 0x00dff650 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ + 0x00dff660 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ + 0x00dff670 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ + 0x00dff680 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ + 0x00dff690 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00dff6a0 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ + 0x00dff6b0 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ + 0x00dff6c0 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ + 0x00dff6d0 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ + 0x00dff6e0 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ + 0x00dff6f0 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00dff700 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ + 0x00dff710 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ + 0x00dff720 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ + 0x00dff730 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ + 0x00dff740 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ + 0x00dff750 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ + 0x00dff760 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ + 0x00dff770 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ + 0x00dff780 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ + 0x00dff790 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ + 0x00dff7a0 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ + 0x00dff7b0 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ + 0x00dff7c0 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ + 0x00dff7d0 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ + 0x00dff7e0 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ + 0x00dff7f0 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ + 0x00dff800 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ + 0x00dff810 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00dff820 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ + 0x00dff830 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ + 0x00dff840 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ + 0x00dff850 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ + 0x00dff860 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ + 0x00dff870 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ + 0x00dff880 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ + 0x00dff890 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ + 0x00dff8a0 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ + 0x00dff8b0 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ + 0x00dff8c0 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ + 0x00dff8d0 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ + 0x00dff8e0 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ + 0x00dff8f0 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ + 0x00dff900 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ + 0x00dff910 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ + 0x00dff920 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ + 0x00dff930 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ + 0x00dff940 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ + 0x00dff950 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ + 0x00dff960 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ + 0x00dff970 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ + 0x00dff980 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00dff990 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ + 0x00dff9a0 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ + 0x00dff9b0 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ + 0x00dff9c0 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ + 0x00dff9d0 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00dff9e0 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00dff9f0 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00dffa00 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00dffa10 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00dffa20 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ + 0x00dffa30 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00dffa40 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00dffa50 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00dffa60 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00dffa70 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00dffa80 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00dffa90 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00dffaa0 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00dffab0 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ + 0x00dffac0 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00dffad0 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ + 0x00dffae0 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ + 0x00dffaf0 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ + 0x00dffb00 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ + 0x00dffb10 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ + 0x00dffb20 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ + 0x00dffb30 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ + 0x00dffb40 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00dffb50 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00dffb60 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00dffb70 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00dffb80 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ + 0x00dffb90 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00dffba0 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00dffbb0 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00dffbc0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00dffbd0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00dffbe0 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ + 0x00dffbf0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00dffc00 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00dffc10 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00dffc20 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00dffc30 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00dffc40 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00dffc50 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00dffc60 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00dffc70 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ + 0x00dffc80 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ + 0x00dffc90 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ + 0x00dffca0 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ + 0x00dffcb0 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ + 0x00dffcc0 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ + 0x00dffcd0 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ + 0x00dffce0 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ + 0x00dffcf0 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ + 0x00dffd00 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ + 0x00dffd10 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00dffd20 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00dffd30 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00dffd40 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ + 0x00dffd50 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ + 0x00dffd60 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ + 0x00dffd70 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ + 0x00dffd80 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ + 0x00dffd90 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ + 0x00dffda0 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ + 0x00dffdb0 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ + 0x00dffdc0 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ + 0x00dffdd0 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ + 0x00dffde0 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ + 0x00dffdf0 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ + 0x00dffe00 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ + 0x00dffe10 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ + 0x00dffe20 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ + 0x00dffe30 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ + 0x00dffe40 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00dffe50 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ + 0x00dffe60 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ + 0x00dffe70 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ + 0x00dffe80 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ + 0x00dffe90 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ + 0x00dffea0 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ + 0x00dffeb0 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ + 0x00dffec0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00dffed0 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ + 0x00dffee0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00dffef0 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ + 0x00dfff00 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ + 0x00dfff10 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ + 0x00dfff20 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ + 0x00dfff30 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ + 0x00dfff40 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ + 0x00dfff50 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ + 0x00dfff60 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ + 0x00dfff70 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ + 0x00dfff80 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ + 0x00dfff90 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ + 0x00dfffa0 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ + 0x00dfffb0 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ + 0x00dfffc0 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ + 0x00dfffd0 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ + 0x00dfffe0 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ + 0x00dffff0 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ + 0x00e00000 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00e00010 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ + 0x00e00020 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ + 0x00e00030 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00e00040 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ + 0x00e00050 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ + 0x00e00060 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ + 0x00e00070 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ + 0x00e00080 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ + 0x00e00090 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ + 0x00e000a0 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ + 0x00e000b0 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ + 0x00e000c0 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ + 0x00e000d0 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ + 0x00e000e0 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ + 0x00e000f0 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ + 0x00e00100 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ + 0x00e00110 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ + 0x00e00120 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ + 0x00e00130 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ + 0x00e00140 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ + 0x00e00150 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ + 0x00e00160 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ + 0x00e00170 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ + 0x00e00180 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ + 0x00e00190 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ + 0x00e001a0 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ + 0x00e001b0 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ + 0x00e001c0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00e001d0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00e001e0 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ + 0x00e001f0 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ + 0x00e00200 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ + 0x00e00210 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ + 0x00e00220 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ + 0x00e00230 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ + 0x00e00240 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ + 0x00e00250 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ + 0x00e00260 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ + 0x00e00270 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ + 0x00e00280 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ + 0x00e00290 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ + 0x00e002a0 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ + 0x00e002b0 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ + 0x00e002c0 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ + 0x00e002d0 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ + 0x00e002e0 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ + 0x00e002f0 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ + 0x00e00300 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00e00310 20202020 76656334 20776569 67687473 vec4 weights │ │ │ │ + 0x00e00320 203d2076 65633428 302e302c 20302e30 = vec4(0.0, 0.0 │ │ │ │ + 0x00e00330 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00e00340 20207665 63322065 203d2074 65787475 vec2 e = textu │ │ │ │ + 0x00e00350 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00e00360 5f636f6f 7264732e 7879292e 72673b20 _coords.xy).rg; │ │ │ │ + 0x00e00370 0a202020 20696620 28652e67 203e2030 . if (e.g > 0 │ │ │ │ + 0x00e00380 2e302920 2f2f2045 64676520 6174206e .0) // Edge at n │ │ │ │ + 0x00e00390 6f727468 200a2020 20207b20 0a202020 orth . { . │ │ │ │ + 0x00e003a0 20202076 65633220 643b200a 20202020 vec2 d; . │ │ │ │ + 0x00e003b0 20207665 63332063 6f6f7264 733b200a vec3 coords; . │ │ │ │ + 0x00e003c0 20202020 2020636f 6f726473 2e78203d coords.x = │ │ │ │ + 0x00e003d0 20534d41 41536561 72636858 4c656674 SMAASearchXLeft │ │ │ │ + 0x00e003e0 28765f6f 66667365 74302e78 792c2076 (v_offset0.xy, v │ │ │ │ + 0x00e003f0 5f6f6666 73657432 2e78293b 200a2020 _offset2.x); . │ │ │ │ + 0x00e00400 20202020 636f6f72 64732e79 203d2076 coords.y = v │ │ │ │ + 0x00e00410 5f6f6666 73657431 2e793b20 0a202020 _offset1.y; . │ │ │ │ + 0x00e00420 20202064 2e78203d 20636f6f 7264732e d.x = coords. │ │ │ │ + 0x00e00430 783b200a 20202020 2020666c 6f617420 x; . float │ │ │ │ + 0x00e00440 6531203d 20534d41 4153616d 706c654c e1 = SMAASampleL │ │ │ │ + 0x00e00450 6576656c 5a65726f 28755f63 6f6c6f72 evelZero(u_color │ │ │ │ + 0x00e00460 5465782c 20636f6f 7264732e 7879292e Tex, coords.xy). │ │ │ │ + 0x00e00470 723b200a 20202020 2020636f 6f726473 r; . coords │ │ │ │ + 0x00e00480 2e7a203d 20534d41 41536561 72636858 .z = SMAASearchX │ │ │ │ + 0x00e00490 52696768 7428765f 6f666673 6574302e Right(v_offset0. │ │ │ │ + 0x00e004a0 7a772c20 765f6f66 66736574 322e7929 zw, v_offset2.y) │ │ │ │ + 0x00e004b0 3b200a20 20202020 20642e79 203d2063 ; . d.y = c │ │ │ │ + 0x00e004c0 6f6f7264 732e7a3b 200a2020 20202020 oords.z; . │ │ │ │ + 0x00e004d0 76656332 207a7a20 3d20755f 6672616d vec2 zz = u_fram │ │ │ │ + 0x00e004e0 65627566 6665724d 65747269 63732e7a ebufferMetrics.z │ │ │ │ + 0x00e004f0 7a3b200a 20202020 20206420 3d206162 z; . d = ab │ │ │ │ + 0x00e00500 7328534d 4141526f 756e6428 7a7a202a s(SMAARound(zz * │ │ │ │ + 0x00e00510 2064202d 20765f63 6f6f7264 732e7a7a d - v_coords.zz │ │ │ │ + 0x00e00520 29293b20 0a202020 20202076 65633220 )); . vec2 │ │ │ │ + 0x00e00530 73717274 5f64203d 20737172 74286429 sqrt_d = sqrt(d) │ │ │ │ + 0x00e00540 3b200a20 20202020 20666c6f 61742065 ; . float e │ │ │ │ + 0x00e00550 32203d20 534d4141 53616d70 6c654c65 2 = SMAASampleLe │ │ │ │ + 0x00e00560 76656c5a 65726f4f 66667365 7428755f velZeroOffset(u_ │ │ │ │ + 0x00e00570 636f6c6f 72546578 2c20636f 6f726473 colorTex, coords │ │ │ │ + 0x00e00580 2e7a792c 20534d41 414f6666 73657428 .zy, SMAAOffset( │ │ │ │ + 0x00e00590 312c2030 29292e72 3b200a20 20202020 1, 0)).r; . │ │ │ │ + 0x00e005a0 20776569 67687473 2e726720 3d20534d weights.rg = SM │ │ │ │ + 0x00e005b0 41414172 65612873 7172745f 642c2065 AAArea(sqrt_d, e │ │ │ │ + 0x00e005c0 312c2065 32293b20 0a202020 207d200a 1, e2); . } . │ │ │ │ + 0x00e005d0 20202020 69662028 652e7220 3e20302e if (e.r > 0. │ │ │ │ + 0x00e005e0 3029202f 2f204564 67652061 74207765 0) // Edge at we │ │ │ │ + 0x00e005f0 7374200a 20202020 7b200a20 20202020 st . { . │ │ │ │ + 0x00e00600 20766563 3220643b 200a2020 20202020 vec2 d; . │ │ │ │ + 0x00e00610 76656333 20636f6f 7264733b 200a2020 vec3 coords; . │ │ │ │ + 0x00e00620 20202020 636f6f72 64732e79 203d2053 coords.y = S │ │ │ │ + 0x00e00630 4d414153 65617263 68595570 28765f6f MAASearchYUp(v_o │ │ │ │ + 0x00e00640 66667365 74312e78 792c2076 5f6f6666 ffset1.xy, v_off │ │ │ │ + 0x00e00650 73657432 2e7a293b 200a2020 20202020 set2.z); . │ │ │ │ + 0x00e00660 636f6f72 64732e78 203d2076 5f6f6666 coords.x = v_off │ │ │ │ + 0x00e00670 73657430 2e783b20 0a202020 20202064 set0.x; . d │ │ │ │ + 0x00e00680 2e78203d 20636f6f 7264732e 793b200a .x = coords.y; . │ │ │ │ + 0x00e00690 20202020 2020666c 6f617420 6531203d float e1 = │ │ │ │ + 0x00e006a0 20534d41 4153616d 706c654c 6576656c SMAASampleLevel │ │ │ │ + 0x00e006b0 5a65726f 28755f63 6f6c6f72 5465782c Zero(u_colorTex, │ │ │ │ + 0x00e006c0 20636f6f 7264732e 7879292e 673b200a coords.xy).g; . │ │ │ │ + 0x00e006d0 20202020 2020636f 6f726473 2e7a203d coords.z = │ │ │ │ + 0x00e006e0 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ + 0x00e006f0 28765f6f 66667365 74312e7a 772c2076 (v_offset1.zw, v │ │ │ │ + 0x00e00700 5f6f6666 73657432 2e77293b 200a2020 _offset2.w); . │ │ │ │ + 0x00e00710 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ + 0x00e00720 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ + 0x00e00730 7777203d 20755f66 72616d65 62756666 ww = u_framebuff │ │ │ │ + 0x00e00740 65724d65 74726963 732e7777 3b200a20 erMetrics.ww; . │ │ │ │ + 0x00e00750 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ + 0x00e00760 41526f75 6e642877 77202a20 64202d20 ARound(ww * d - │ │ │ │ + 0x00e00770 765f636f 6f726473 2e777729 293b200a v_coords.ww)); . │ │ │ │ + 0x00e00780 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ + 0x00e00790 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ + 0x00e007a0 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ + 0x00e007b0 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00e007c0 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ + 0x00e007d0 5465782c 20636f6f 7264732e 787a2c20 Tex, coords.xz, │ │ │ │ + 0x00e007e0 534d4141 4f666673 65742830 2c203129 SMAAOffset(0, 1) │ │ │ │ + 0x00e007f0 292e673b 200a2020 20202020 77656967 ).g; . weig │ │ │ │ + 0x00e00800 6874732e 6261203d 20534d41 41417265 hts.ba = SMAAAre │ │ │ │ + 0x00e00810 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ + 0x00e00820 293b200a 20202020 7d200a20 20202076 ); . } . v │ │ │ │ + 0x00e00830 5f467261 67436f6c 6f72203d 20776569 _FragColor = wei │ │ │ │ + 0x00e00840 67687473 3b200a20 207d200a 00000000 ghts; . } ..... │ │ │ │ + 0x00e00850 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00e00860 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00e00870 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00e00880 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00e00890 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00e008a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00e008b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00e008c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00e008d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00e008e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00e008f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00e00900 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00e00910 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00e00920 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00e00930 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00e00940 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00e00950 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00e00960 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00e00970 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00e00980 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00e00990 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00e009a0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00e009b0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00e009c0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00e009d0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00e009e0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00e009f0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00e00a00 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00e00a10 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00e00a20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00e00a30 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00e00a40 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00e00a50 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00e00a60 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00e00a70 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00e00a80 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00e00a90 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00e00aa0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00e00ab0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00e00ac0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00e00ad0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00e00ae0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00e00af0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00e00b00 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00e00b10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00e00b20 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00e00b30 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00e00b40 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00e00b50 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00e00b60 6c6f6174 206b5065 72696f64 5078203d loat kPeriodPx = │ │ │ │ + 0x00e00b70 20382e30 3b202020 20202f2f 20646973 8.0; // dis │ │ │ │ + 0x00e00b80 74616e63 65206265 74776565 6e206469 tance between di │ │ │ │ + 0x00e00b90 61676f6e 616c206c 696e6573 2c20696e agonal lines, in │ │ │ │ + 0x00e00ba0 20276261 73652720 70697865 6c73200a 'base' pixels . │ │ │ │ + 0x00e00bb0 2020636f 6e737420 666c6f61 74206b48 const float kH │ │ │ │ + 0x00e00bc0 616c6657 69647468 5078203d 20302e37 alfWidthPx = 0.7 │ │ │ │ + 0x00e00bd0 3b20202f 2f206861 6c66206c 696e6520 ; // half line │ │ │ │ + 0x00e00be0 77696474 6820616c 6f6e6720 74686520 width along the │ │ │ │ + 0x00e00bf0 782b7920 61786973 20287e31 70782070 x+y axis (~1px p │ │ │ │ + 0x00e00c00 65727065 6e646963 756c6172 29200a20 erpendicular) . │ │ │ │ + 0x00e00c10 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00e00c20 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00e00c30 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ + 0x00e00c40 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ + 0x00e00c50 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ + 0x00e00c60 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ + 0x00e00c70 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ + 0x00e00c80 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ + 0x00e00c90 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ + 0x00e00ca0 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ + 0x00e00cb0 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ + 0x00e00cc0 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ + 0x00e00cd0 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ + 0x00e00ce0 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ + 0x00e00cf0 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ + 0x00e00d00 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ + 0x00e00d10 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ + 0x00e00d20 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ + 0x00e00d30 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ + 0x00e00d40 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ + 0x00e00d50 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00e00d60 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ + 0x00e00d70 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ + 0x00e00d80 50207665 63342063 6f6c6f72 203d2076 P vec4 color = v │ │ │ │ + 0x00e00d90 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00e00da0 200a2020 20204c4f 575f5020 76656334 . LOW_P vec4 │ │ │ │ + 0x00e00db0 20636f6c 6f72203d 20746578 74757265 color = texture │ │ │ │ + 0x00e00dc0 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ + 0x00e00dd0 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00e00de0 0a202023 656e6469 66200a20 20202076 . #endif . v │ │ │ │ + 0x00e00df0 65633220 7078203d 20765f6d 61736b54 ec2 px = v_maskT │ │ │ │ + 0x00e00e00 6578436f 6f726473 202a2031 362e303b exCoords * 16.0; │ │ │ │ + 0x00e00e10 200a2020 2020666c 6f617420 64696167 . float diag │ │ │ │ + 0x00e00e20 203d2070 782e7820 2b207078 2e793b20 = px.x + px.y; │ │ │ │ + 0x00e00e30 0a202020 20666c6f 6174206d 203d206d . float m = m │ │ │ │ + 0x00e00e40 6f642864 6961672c 206b5065 72696f64 od(diag, kPeriod │ │ │ │ + 0x00e00e50 5078293b 200a2020 2020666c 6f617420 Px); . float │ │ │ │ + 0x00e00e60 64697374 203d206d 696e286d 2c206b50 dist = min(m, kP │ │ │ │ + 0x00e00e70 6572696f 64507820 2d206d29 3b202020 eriodPx - m); │ │ │ │ + 0x00e00e80 20202020 20202020 20202020 2f2f2064 // d │ │ │ │ + 0x00e00e90 69737461 6e636520 746f2074 6865206e istance to the n │ │ │ │ + 0x00e00ea0 65617265 7374206c 696e6520 63656e74 earest line cent │ │ │ │ + 0x00e00eb0 6572200a 20202020 666c6f61 74206161 er . float aa │ │ │ │ + 0x00e00ec0 203d2066 77696474 68286469 6167293b = fwidth(diag); │ │ │ │ + 0x00e00ed0 200a2020 2020666c 6f617420 636f7665 . float cove │ │ │ │ + 0x00e00ee0 72616765 203d2031 2e30202d 20736d6f rage = 1.0 - smo │ │ │ │ + 0x00e00ef0 6f746873 74657028 6b48616c 66576964 othstep(kHalfWid │ │ │ │ + 0x00e00f00 74685078 202d2061 612c206b 48616c66 thPx - aa, kHalf │ │ │ │ + 0x00e00f10 57696474 68507820 2b206161 2c206469 WidthPx + aa, di │ │ │ │ + 0x00e00f20 7374293b 200a2020 2020636f 6c6f722e st); . color. │ │ │ │ + 0x00e00f30 61202a3d 20636f76 65726167 65202a20 a *= coverage * │ │ │ │ + 0x00e00f40 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00e00f50 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ + 0x00e00f60 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00e00f70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00e00f80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00e00f90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00e00fa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00e00fb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00e00fc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00e00fd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00e00fe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00e00ff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00e01000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00e01010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00e01020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00e01030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00e01040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00e01050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00e01060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00e01070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00e01080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00e01090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00e010a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00e010b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00e010c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00e010d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00e010e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00e010f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00e01100 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00e01110 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00e01120 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ + 0x00e01130 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ + 0x00e01140 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ + 0x00e01150 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ + 0x00e01160 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00e01170 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00e01180 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00e01190 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00e011a0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00e011b0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00e011c0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00e011d0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00e011e0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00e011f0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00e01200 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00e01210 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00e01220 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00e01230 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00e01240 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00e01250 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00e01260 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ + 0x00e01270 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00e01280 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00e01290 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00e012a0 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ + 0x00e012b0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00e012c0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00e012d0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00e012e0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00e012f0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00e01300 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00e01310 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00e01320 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00e01330 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00e01340 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00e01350 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00e01360 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00e01370 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00e01380 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00e01390 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00e013a0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00e013b0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00e013c0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00e013d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00e013e0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00e013f0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00e01400 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00e01410 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00e01420 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00e01430 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00e01440 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00e01450 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00e01460 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00e01470 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00e01480 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00e01490 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00e014a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00e014b0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00e014c0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00e014d0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00e014e0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00e014f0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00e01500 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00e01510 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00e01520 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00e01530 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00e01540 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00e01550 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00e01560 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00e01570 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00e01580 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00e01590 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00e015a0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00e015b0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00e015c0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00e015d0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00e015e0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00e015f0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00e01600 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00e01610 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00e01620 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00e01630 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00e01640 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00e01650 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00e01660 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00e01670 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00e01680 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00e01690 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00e016a0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00e016b0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00e016c0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00e016d0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00e016e0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00e016f0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00e01700 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00e01710 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00e01720 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00e01730 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00e01740 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00e01750 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00e01760 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00e01770 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00e01780 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00e01790 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00e017a0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00e017b0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00e017c0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00e017d0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00e017e0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00e017f0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00e01800 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00e01810 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00e01820 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00e01830 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00e01840 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00e01850 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ + 0x00e01860 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ + 0x00e01870 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ + 0x00e01880 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ + 0x00e01890 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ + 0x00e018a0 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ + 0x00e018b0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00e018c0 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00e018d0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00e018e0 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ + 0x00e018f0 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ + 0x00e01900 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ + 0x00e01910 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ + 0x00e01920 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00e01930 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ + 0x00e01940 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ + 0x00e01950 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ + 0x00e01960 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ + 0x00e01970 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00e01980 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00e01990 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ + 0x00e019a0 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ + 0x00e019b0 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ + 0x00e019c0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00e019d0 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ + 0x00e019e0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00e019f0 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ + 0x00e01a00 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00e01a10 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00e01a20 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00e01a30 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00e01a40 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00e01a50 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00e01a60 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ + 0x00e01a70 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ + 0x00e01a80 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00e01a90 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00e01aa0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00e01ab0 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ + 0x00e01ac0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00e01ad0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00e01ae0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00e01af0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00e01b00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00e01b10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00e01b20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00e01b30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00e01b40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00e01b50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00e01b60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00e01b70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00e01b80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00e01b90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00e01ba0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00e01bb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00e01bc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00e01bd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00e01be0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00e01bf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00e01c00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00e01c10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00e01c20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00e01c30 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00e01c40 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00e01c50 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00e01c60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00e01c70 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00e01c80 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00e01c90 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00e01ca0 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00e01cb0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00e01cc0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00e01cd0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00e01ce0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00e01cf0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00e01d00 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00e01d10 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00e01d20 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00e01d30 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00e01d40 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00e01d50 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00e01d60 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00e01d70 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00e01d80 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00e01d90 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00e01da0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00e01db0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00e01dc0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00e01dd0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00e01de0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00e01df0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00e01e00 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00e01e10 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00e01e20 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00e01e30 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00e01e40 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00e01e50 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00e01e60 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00e01e70 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00e01e80 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00e01e90 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00e01ea0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00e01eb0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00e01ec0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00e01ed0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00e01ee0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00e01ef0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00e01f00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00e01f10 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00e01f20 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00e01f30 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00e01f40 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00e01f50 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00e01f60 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00e01f70 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00e01f80 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00e01f90 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00e01fa0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00e01fb0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00e01fc0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00e01fd0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00e01fe0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00e01ff0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00e02000 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00e02010 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00e02020 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00e02030 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00e02040 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00e02050 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00e02060 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00e02070 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00e02080 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00e02090 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00e020a0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00e020b0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00e020c0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00e020d0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00e020e0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00e020f0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00e02100 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00e02110 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00e02120 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00e02130 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00e02140 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00e02150 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00e02160 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00e02170 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00e02180 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00e02190 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00e021a0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00e021b0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00e021c0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00e021d0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00e021e0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00e021f0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00e02200 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00e02210 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00e02220 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00e02230 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00e02240 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00e02250 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00e02260 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00e02270 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00e02280 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00e02290 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00e022a0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00e022b0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00e022c0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00e022d0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00e022e0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00e022f0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00e02300 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00e02310 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00e02320 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00e02330 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00e02340 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00e02350 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00e02360 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00e02370 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ + 0x00e02380 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ + 0x00e02390 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ + 0x00e023a0 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ + 0x00e023b0 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ + 0x00e023c0 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00e023d0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00e023e0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00e023f0 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ + 0x00e02400 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ + 0x00e02410 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00e02420 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00e02430 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00e02440 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00e02450 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00e02460 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00e02470 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00e02480 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00e02490 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00e024a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00e024b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00e024c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00e024d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00e024e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00e024f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00e02500 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00e02510 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00e02520 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00e02530 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00e02540 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00e02550 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00e02560 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00e02570 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00e02580 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00e02590 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00e025a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00e025b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00e025c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00e025d0 63322076 5f746578 436f6f72 64733b20 c2 v_texCoords; │ │ │ │ + 0x00e025e0 0a202069 6e207665 63342076 5f636f6c . in vec4 v_col │ │ │ │ + 0x00e025f0 6f723b20 0a20206f 75742076 65633420 or; . out vec4 │ │ │ │ + 0x00e02600 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00e02610 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00e02620 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00e02630 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00e02640 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00e02650 20313030 302e303b 200a2020 4c4f575f 1000.0; . LOW_ │ │ │ │ + 0x00e02660 50207665 6333204d 6f64756c 61746542 P vec3 ModulateB │ │ │ │ + 0x00e02670 79506174 7465726e 446f7473 284c4f57 yPatternDots(LOW │ │ │ │ + 0x00e02680 5f502076 65633320 636f6c6f 722c2066 _P vec3 color, f │ │ │ │ + 0x00e02690 6c6f6174 20646172 6b656e2c 20666c6f loat darken, flo │ │ │ │ + 0x00e026a0 61742063 6f766572 61676529 200a2020 at coverage) . │ │ │ │ + 0x00e026b0 7b200a20 20202063 6f6e7374 20666c6f { . const flo │ │ │ │ + 0x00e026c0 6174206b 4c696768 74656e20 3d20302e at kLighten = 0. │ │ │ │ + 0x00e026d0 3037353b 200a2020 20206966 2028646f 075; . if (do │ │ │ │ + 0x00e026e0 7428636f 6c6f722c 20766563 3328302e t(color, vec3(0. │ │ │ │ + 0x00e026f0 32313236 2c20302e 37313532 2c20302e 2126, 0.7152, 0. │ │ │ │ + 0x00e02700 30373232 2929203c 20302e35 29200a20 0722)) < 0.5) . │ │ │ │ + 0x00e02710 20202020 20726574 75726e20 636f6c6f return colo │ │ │ │ + 0x00e02720 72202b20 636f7665 72616765 202a206b r + coverage * k │ │ │ │ + 0x00e02730 4c696768 74656e3b 200a2020 20207265 Lighten; . re │ │ │ │ + 0x00e02740 7475726e 20636f6c 6f72202a 206d6978 turn color * mix │ │ │ │ + 0x00e02750 28312e30 2c206461 726b656e 2c20636f (1.0, darken, co │ │ │ │ + 0x00e02760 76657261 6765293b 200a2020 7d200a20 verage); . } . │ │ │ │ + 0x00e02770 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00e02780 7b200a20 2020204c 4f575f50 20766563 { . LOW_P vec │ │ │ │ + 0x00e02790 3420636f 6c6f7220 3d207465 78747572 4 color = textur │ │ │ │ + 0x00e027a0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00e027b0 74657843 6f6f7264 73293b20 0a202020 texCoords); . │ │ │ │ + 0x00e027c0 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ + 0x00e027d0 6f6c6f72 202a2076 5f636f6c 6f723b20 olor * v_color; │ │ │ │ + 0x00e027e0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00e027f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ 0x00e02800 001bcdff f01acdff c01acdff 101bcdff ................ │ │ │ │ 0x00e02810 201bcdff 301bcdff b820cdff d020cdff ...0.... ... .. │ │ │ │ 0x00e02820 e820cdff 0021cdff 1821cdff 3021cdff . ...!...!..0!.. │ │ │ │ 0x00e02830 4821cdff 6021cdff 7821cdff 9021cdff H!..`!..x!...!.. │ │ │ │ 0x00e02840 a821cdff c021cdff f021cdff 0822cdff .!...!...!...".. │ │ │ │ 0x00e02850 d821cdff 2022cdff a020cdff 8820cdff .!.. "... ... .. │ │ │ │ 0x00e02860 901fcdff f01fcdff d81fcdff a81fcdff ................ │ │ │ ├── readelf --wide --decompress --hex-dump=.gnu_debuglink {} │ │ │ │ @@ -1,7 +1,7 @@ │ │ │ │ │ │ │ │ Hex dump of section '.gnu_debuglink': │ │ │ │ - 0x00000000 30623531 39306533 37653930 62333565 0b5190e37e90b35e │ │ │ │ - 0x00000010 33376664 37356533 62653936 35313534 37fd75e3be965154 │ │ │ │ - 0x00000020 37333064 35382e64 65627567 00000000 730d58.debug.... │ │ │ │ - 0x00000030 d69b0276 ...v │ │ │ │ + 0x00000000 62346236 63613462 31383561 65623635 b4b6ca4b185aeb65 │ │ │ │ + 0x00000010 66326638 65393233 62336262 32356331 f2f8e923b3bb25c1 │ │ │ │ + 0x00000020 38333830 37352e64 65627567 00000000 838075.debug.... │ │ │ │ + 0x00000030 4194740e A.t.