--- /srv/rebuilderd/tmp/rebuilderd6SuXuy/inputs/organicmaps_2026.03.12-05+ds-1_amd64.deb +++ /srv/rebuilderd/tmp/rebuilderd6SuXuy/out/organicmaps_2026.03.12-05+ds-1_amd64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-04-02 06:35:55.000000 debian-binary │ --rw-r--r-- 0 0 0 1208 2026-04-02 06:35:55.000000 control.tar.xz │ --rw-r--r-- 0 0 0 5105184 2026-04-02 06:35:55.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 1212 2026-04-02 06:35:55.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 5105704 2026-04-02 06:35:55.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── ./usr/bin/OMaps │ │ │┄ File has been modified after NT_GNU_BUILD_ID has been applied. │ │ │ ├── readelf --wide --notes {} │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ │ │ │ │ Displaying notes found in: .note.gnu.build-id │ │ │ │ Owner Data size Description │ │ │ │ - GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 1916134308cdbbbefa15be775765b6efd2d4085a │ │ │ │ + GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 1b7d01dfcacbd4f3a71fb8fde5893137e0aec1cc │ │ │ │ │ │ │ │ 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 @@ │ │ │ │ -Z/lib64/ld-linux-x86-64.so.2 │ │ │ │ +/lib64/ld-linux-x86-64.so.2 │ │ │ │ _ITM_deregisterTMCloneTable │ │ │ │ __gmon_start__ │ │ │ │ _ITM_registerTMCloneTable │ │ │ │ _ZN6google14FlagRegistererC1IiEEPKcS3_S3_PT_S5_ │ │ │ │ _ZN6google16SetVersionStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE │ │ │ │ _ZSt19piecewise_construct │ │ │ │ _ZN6google21ParseCommandLineFlagsEPiPPPcb │ │ │ │ @@ -24670,15 +24670,15 @@ │ │ │ │ ;current-position │ │ │ │ CHECK(numSegsForThisFid % numDir │ │ │ │ CHECK(u < numSpe numSpeedGroups) │ │ │ │ @SpeedKMpH [ weigSpeedFactor [ weInOutCitySpeedKMedKMpH [ inCity:InOutCityFactor Factor [ inCity: │ │ │ │ https://instagrahttps://facebookhttps://twitter.CHECK(i != m_map │ │ │ │ CaptionRuleProtoPathTextRuleProtDrawElementProtoClassifElementPrColorElementProtColorsElementProIncorrectTransitransitionsFormatUnsupportedTimeZedTimeZoneFormatIncorrectGenerationYearOffsetForIncorrectBaseOffBaseOffsetFormatIncorrectDstDeltionsLengthFormatransitionsAmountIncorrectDayDeltIncorrectMinuteOinuteOfDayFormat$ │ │ │ │ CHECK(it != m_impl.timezones.end& │ │ │ │ -generator/timezone/timezone_infoFailed to load timezone databasehttps://meta.omaa.omaps.app/maps{"servers":["https://cdn-nl1.organicmaps.app/","https://cdn-uk1.organicmaps.app/","https://cdn.organicmaps.app/"2026.04.02-0-0000-00000000-Linuxproducts_settingexpand 32-byte k │ │ │ │ +generator/timezone/timezone_infoFailed to load timezone databasehttps://meta.omaa.omaps.app/maps{"servers":["https://cdn-nl1.organicmaps.app/","https://cdn-uk1.organicmaps.app/","https://cdn.organicmaps.app/"2026.04.09-0-0000-00000000-Linuxproducts_settingexpand 32-byte k │ │ │ │ "placePagePrompt │ │ │ │ CHECK(curr.m_delelta >> 62 == 0)NULL string poin │ │ │ │ ?Zero length lineth linear objectTexture|Handles │ │ │ │ tEXtSoftware │ │ │ │ Paint.NET v3.5.87; │ │ │ │ pYldY]d[ │ │ │ │ b7Y0(zdy │ │ │ │ @@ -26305,68 +26305,70 @@ │ │ │ │ #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_colorTexCoord; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ - vec4 transformedPivot = pivot; │ │ │ │ - float w = transformedPivot.w; │ │ │ │ - transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ - transformedPivot.z *= transformedPivot.w / w; │ │ │ │ - #ifdef VULKAN │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ - vec2 d = p - originalAxisPos; │ │ │ │ - if (dot(d, d) != 0.0) │ │ │ │ - return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ - else │ │ │ │ - return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + 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; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ + if (finalColor.a < 0.01) │ │ │ │ + discard; │ │ │ │ + finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26374,28 +26376,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out float v_intensity; │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const vec4 kNormalizedLightDir = vec4(0.3162, 0.0, 0.9486, 0.0); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -26417,31 +26419,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - 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 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ + v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26450,31 +26441,24 @@ │ │ │ │ #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 vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_offsets; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + uniform vec4 u_params; │ │ │ │ + uniform float u_lineHalfWidth; │ │ │ │ + uniform float u_maxRadius; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -26496,53 +26480,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, 1.0) * u_modelView; │ │ │ │ - pos.xyw = (pos * u_projection).xyw; │ │ │ │ - pos.z = a_position.z * u_zScale; │ │ │ │ - gl_Position = u_pivotTransform * pos; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #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_normal; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ - const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ - v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * u_color.rgb, u_color.a); │ │ │ │ + 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; │ │ │ │ @@ -26550,21 +26504,17 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec3 a_normal; │ │ │ │ - out vec3 v_normal; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ 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 │ │ │ │ @@ -26586,21 +26536,16 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + v_colorTexCoords = a_tcoord; │ │ │ │ + gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26608,23 +26553,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in float v_intensity; │ │ │ │ + in vec3 v_normal; │ │ │ │ + in vec2 v_texCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_transform; │ │ │ │ uniform mat4 u_normalTransform; │ │ │ │ uniform vec4 u_color; │ │ │ │ uniform vec2 u_texCoordFlipping; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = vec4(u_color.rgb, u_color.a * smoothstep(0.7, 1.0, v_intensity)); │ │ │ │ + float phongDiffuse = max(0.0, -dot(lightDir, v_normal)); │ │ │ │ + vec4 color = texture(u_colorTex, v_texCoords) * u_color; │ │ │ │ + v_FragColor = vec4((phongDiffuse * 0.5 + 0.5) * color.rgb, color.a); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26632,45 +26582,35 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in float v_intensity; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - v_FragColor = vec4(u_color.rgb, u_color.a * v_intensity); │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - out float v_intensity; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -26692,21 +26632,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_intensity = a_texCoords.x; │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26714,28 +26656,95 @@ │ │ │ │ #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 vec3 v_length; │ │ │ │ + in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ + uniform float u_opacity; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.81; │ │ │ │ + const float kOutlineThreshold2 = 0.71; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + if (v_length.x < v_length.z) │ │ │ │ + discard; │ │ │ │ + vec2 coefs = step(v_length.xx, u_fakeBorders); │ │ │ │ + coefs.y = 1.0 - coefs.y; │ │ │ │ + vec4 mainColor = mix(u_color, u_fakeColor, coefs.x); │ │ │ │ + mainColor = mix(mainColor, u_fakeColor, coefs.y); │ │ │ │ + vec4 mainOutlineColor = mix(u_outlineColor, u_fakeOutlineColor, coefs.x); │ │ │ │ + mainOutlineColor = mix(mainOutlineColor, u_fakeOutlineColor, coefs.y); │ │ │ │ + vec4 color = mix(mix(mainColor, vec4(v_color.rgb, 1.0), v_color.a), mainColor, step(u_routeParams.w, 0.0)); │ │ │ │ + color = mix(color, mainOutlineColor, step(kOutlineThreshold1, abs(v_length.y))); │ │ │ │ + color = mix(color, mainOutlineColor, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_length.y))); │ │ │ │ + color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))); │ │ │ │ + color = vec4(mix(color.rgb, u_maskColor.rgb, u_maskColor.a), color.a); │ │ │ │ + v_FragColor = color; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + in vec2 v_maskTexCoord; │ │ │ │ + in float v_halfLength; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ + uniform float u_opacity; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.8; │ │ │ │ + const float kOutlineThreshold2 = 0.5; │ │ │ │ + const float kMaskOpacity = 0.7; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - 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 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; │ │ │ │ @@ -26743,23 +26752,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - out vec3 v_normal; │ │ │ │ - out vec2 v_texCoords; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + 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 │ │ │ │ @@ -26781,22 +26788,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ - v_texCoords = mix(a_texCoords, 1.0 - a_texCoords, u_texCoordFlipping); │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + v_colorTexCoords = a_tcoord; │ │ │ │ + v_offset0 = u_framebufferMetrics.xyxy * vec4(-1.0, 0.0, 0.0, -1.0) + a_tcoord.xyxy; │ │ │ │ + v_offset1 = u_framebufferMetrics.xyxy * vec4( 1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ + v_offset2 = u_framebufferMetrics.xyxy * vec4(-2.0, 0.0, 0.0, -2.0) + a_tcoord.xyxy; │ │ │ │ + gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -26810,36 +26814,31 @@ │ │ │ │ #endif │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - in vec3 v_radius; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - const float aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ LOW_P vec4 finalColor = v_color; │ │ │ │ #else │ │ │ │ LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #endif │ │ │ │ - float smallRadius = v_radius.z - aaPixelsCount; │ │ │ │ - float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ - v_radius.x * v_radius.x + v_radius.y * v_radius.y); │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -26848,87 +26847,14 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - out vec3 v_radius; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ - vec4 transformedPivot = pivot; │ │ │ │ - float w = transformedPivot.w; │ │ │ │ - transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ - transformedPivot.z *= transformedPivot.w / w; │ │ │ │ - #ifdef VULKAN │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ - vec2 d = p - originalAxisPos; │ │ │ │ - if (dot(d, d) != 0.0) │ │ │ │ - return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ - else │ │ │ │ - return originalAxisPos; │ │ │ │ - void main() │ │ │ │ - vec4 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; │ │ │ │ @@ -26956,27 +26882,26 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_normal; │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ 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 │ │ │ │ @@ -26998,20 +26923,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() │ │ │ │ - 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 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27019,46 +26942,42 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ + in vec3 v_radius; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ const float aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ + LOW_P vec4 finalColor = v_color; │ │ │ │ #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #endif │ │ │ │ - float r1 = (v_normal.z - aaPixelsCount) * (v_normal.z - aaPixelsCount); │ │ │ │ - float r2 = v_normal.x * v_normal.x + v_normal.y * v_normal.y; │ │ │ │ - float r3 = v_normal.z * v_normal.z; │ │ │ │ - float alpha = mix(step(r3, r2), smoothstep(r1, r3, r2), v_normal.w); │ │ │ │ - LOW_P vec4 finalColor = color; │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - alpha); │ │ │ │ - if (finalColor.a == 0.0) │ │ │ │ - discard; │ │ │ │ + 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 │ │ │ │ @@ -27067,34 +26986,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27116,23 +27029,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ - vec4 pos = vec4(a_normal.xy + a_colorTexCoords.zw, 0, 0) + p; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ - #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + 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; │ │ │ │ @@ -27140,34 +27049,26 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ 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 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 sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + 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 │ │ │ │ @@ -27189,23 +27090,26 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal.xy + a_colorTexCoords.zw, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, 0.0, offset.xy); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ - #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + 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; │ │ │ │ @@ -27213,33 +27117,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ + 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; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ + const float aaPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - float mask = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ - color.a = color.a * mask * u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ + 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; │ │ │ │ @@ -27247,28 +27146,19 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec4 a_maskTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out vec4 v_offset; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27290,25 +27180,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; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_colorTexCoords = a_tcoord; │ │ │ │ + v_offset = u_framebufferMetrics.xyxy * vec4(1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ + gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27316,19 +27198,19 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ + in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform vec4 u_color; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = u_color; │ │ │ │ + v_FragColor = v_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27336,15 +27218,36 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec2 u_position; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + const float kBaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27366,19 +27269,30 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(a_position, 0, 1); │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = shiftedPos * u_projection; │ │ │ │ #ifdef VULKAN │ │ │ │ gl_Position.y = -gl_Position.y; │ │ │ │ gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ + 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; │ │ │ │ @@ -27386,41 +27300,29 @@ │ │ │ │ #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 vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - #endif │ │ │ │ - color *= texture(u_maskTex, v_maskTexCoords); │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = 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; │ │ │ │ @@ -27428,34 +27330,54 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + in vec3 v_texCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + v_FragColor = texture(u_colorTex, v_texCoords.xy); │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #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 │ │ │ │ @@ -27477,45 +27399,24 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ + 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); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - in vec2 v_texCoords; │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_texCoords); │ │ │ │ - v_FragColor = color * v_color; │ │ │ │ + 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; │ │ │ │ @@ -27524,19 +27425,24 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 a_position; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec2 v_texCoords; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec2 u_position; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27558,21 +27464,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_texCoords = a_texCoords; │ │ │ │ - v_color = a_color; │ │ │ │ - gl_Position = vec4(a_position, 0, 1) * u_projection; │ │ │ │ + gl_Position = vec4(u_position + a_position + u_length * a_normal, 0, 1) * u_projection; │ │ │ │ #ifdef VULKAN │ │ │ │ gl_Position.y = -gl_Position.y; │ │ │ │ gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27580,38 +27485,43 @@ │ │ │ │ #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_colorTexCoords; │ │ │ │ + in vec4 v_offset; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_blendingWeightTex; │ │ │ │ + #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - #endif │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ + vec4 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; │ │ │ │ @@ -27621,20 +27531,21 @@ │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + 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; │ │ │ │ @@ -27667,27 +27578,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - float halfWidth = length(normal); │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (halfWidth != 0.0) │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + normal, │ │ │ │ - u_modelView, halfWidth); │ │ │ │ + vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ + vec4 pos = vec4(a_normal.xy, 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 │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_radius = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -27695,32 +27602,38 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords) * texture(u_maskTex, v_maskTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + #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; │ │ │ │ @@ -27728,62 +27641,35 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + in vec4 v_texCoords; │ │ │ │ + in vec4 v_maskColor; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ - vec4 transformedPivot = pivot; │ │ │ │ - float w = transformedPivot.w; │ │ │ │ - transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ - transformedPivot.z *= transformedPivot.w / w; │ │ │ │ - #ifdef VULKAN │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ - vec2 d = p - originalAxisPos; │ │ │ │ - if (dot(d, d) != 0.0) │ │ │ │ - return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ - else │ │ │ │ - return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 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; │ │ │ │ + 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; │ │ │ │ @@ -27791,28 +27677,34 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ + in vec3 a_position; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ in vec2 a_maskTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -27834,19 +27726,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); │ │ │ │ + vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + #else │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #endif │ │ │ │ v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -27855,26 +27749,34 @@ │ │ │ │ #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 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 vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ 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 │ │ │ │ @@ -27896,26 +27798,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 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; │ │ │ │ + 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; │ │ │ │ @@ -27923,26 +27825,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_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 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 │ │ │ │ @@ -27964,23 +27864,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - float normalLen = length(a_normal); │ │ │ │ - vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView; │ │ │ │ - vec4 norm = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - if (dot(n, n) != 0.0) │ │ │ │ - norm = normalize(n) * normalLen; │ │ │ │ - vec4 shiftedPos = norm + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + v_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; │ │ │ │ @@ -27988,26 +27884,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + in vec3 a_pos; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ + out float v_intensity; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -28029,19 +27920,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = vec4(u_position.xy, 0.0, 1.0) * u_modelView; │ │ │ │ - vec4 normal = vec4(a_normal * u_accuracy, 0.0, 0.0); │ │ │ │ - position = (position + normal) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(position, u_pivotTransform, u_position.z * u_zScale); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_intensity = a_texCoords.x; │ │ │ │ + gl_Position = position; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28049,15 +27942,15 @@ │ │ │ │ #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_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; │ │ │ │ @@ -28066,33 +27959,26 @@ │ │ │ │ uniform vec4 u_fakeColor; │ │ │ │ uniform vec4 u_fakeOutlineColor; │ │ │ │ uniform vec2 u_fakeBorders; │ │ │ │ uniform vec2 u_pattern; │ │ │ │ uniform vec2 u_angleCosSin; │ │ │ │ uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - const float kOutlineThreshold1 = 0.81; │ │ │ │ - const float kOutlineThreshold2 = 0.71; │ │ │ │ + const float kAntialiasingPixelsCount = 2.5; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - if (v_length.x < v_length.z) │ │ │ │ + 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; │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -28101,33 +27987,27 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec3 a_length; │ │ │ │ + in vec3 a_normalAndAnimateOrZ; │ │ │ │ + in vec4 a_texCoords; │ │ │ │ in vec4 a_color; │ │ │ │ - out vec3 v_length; │ │ │ │ - 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 │ │ │ │ @@ -28149,26 +28029,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - 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); │ │ │ │ + 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; │ │ │ │ @@ -28176,39 +28055,33 @@ │ │ │ │ #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; │ │ │ │ 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; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - if (finalColor.a < 0.01) │ │ │ │ - discard; │ │ │ │ - finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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; │ │ │ │ @@ -28216,69 +28089,31 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + 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 vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ - vec4 transformedPivot = pivot; │ │ │ │ - float w = transformedPivot.w; │ │ │ │ - transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ - transformedPivot.z *= transformedPivot.w / w; │ │ │ │ - #ifdef VULKAN │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ - vec2 d = p - originalAxisPos; │ │ │ │ - if (dot(d, d) != 0.0) │ │ │ │ - return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ - else │ │ │ │ - return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 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); │ │ │ │ + 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; │ │ │ │ @@ -28286,49 +28121,25 @@ │ │ │ │ #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 vec3 v_normal; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ + 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; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - float alphaFromPattern(float curLen, float dashLen, float gapLen) │ │ │ │ - float len = dashLen + gapLen; │ │ │ │ - float offset = fract(curLen / len) * len; │ │ │ │ - return step(offset, dashLen); │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ + const vec3 lightDir = vec3(0.316, 0.0, 0.948); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - if (v_length.x < v_length.z) │ │ │ │ - discard; │ │ │ │ - vec2 coefs = step(v_length.xx, u_fakeBorders); │ │ │ │ - coefs.y = 1.0 - coefs.y; │ │ │ │ - vec4 mainColor = mix(u_color, u_fakeColor, coefs.x); │ │ │ │ - mainColor = mix(mainColor, u_fakeColor, coefs.y); │ │ │ │ - vec4 color = mainColor + v_color; │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))) * │ │ │ │ - alphaFromPattern(v_length.x, u_pattern.x, u_pattern.y); │ │ │ │ - color = vec4(mix(color.rgb, u_maskColor.rgb, u_maskColor.a), color.a); │ │ │ │ - v_FragColor = color; │ │ │ │ + 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; │ │ │ │ @@ -28336,77 +28147,37 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_radius; │ │ │ │ - in vec4 v_color; │ │ │ │ - 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; │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = v_color; │ │ │ │ - float aaRadius = max(v_radius.z - kAntialiasingPixelsCount, 0.0); │ │ │ │ - float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, │ │ │ │ - dot(v_radius.xy, v_radius.xy)); │ │ │ │ - finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue); │ │ │ │ - if (finalColor.a < 0.01 || u_routeParams.y > v_radius.w) │ │ │ │ - discard; │ │ │ │ - finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a); │ │ │ │ - v_FragColor = finalColor; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + 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 │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + out float v_lengthY; │ │ │ │ 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 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 │ │ │ │ @@ -28428,54 +28199,30 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float 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 │ │ │ │ + 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 │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoord = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + v_lengthY = len.y; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28483,25 +28230,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + #define TILE_BACKGROUND_MAX_COUNT 64 │ │ │ │ + out vec3 v_texCoords; │ │ │ │ + uniform vec4 u_tileCoordsMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + 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 │ │ │ │ @@ -28523,20 +28266,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(u_position + a_position + u_length * a_normal, 0, 1) * u_projection; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec2 quadVertex = vec2(gl_VertexID & 1, (gl_VertexID >> 1) & 1); │ │ │ │ + vec4 tileCoordsMinMax = u_tileCoordsMinMax[gl_InstanceID]; │ │ │ │ + vec2 worldPos = mix(tileCoordsMinMax.xy, tileCoordsMinMax.zw, quadVertex); │ │ │ │ + vec4 pos = vec4(worldPos, 0.0, 1.0) * u_modelView * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_texCoords = vec3(quadVertex, float(u_textureIndex[gl_InstanceID])); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -28544,41 +28287,30 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + in vec3 a_position; │ │ │ │ + in 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 kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + const float kArrowVSize = 0.25; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -28600,59 +28332,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() │ │ │ │ - v_colorTexCoords = a_tcoord; │ │ │ │ - gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in float v_lengthY; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - #endif │ │ │ │ - color.a *= u_opacity; │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_lengthY))); │ │ │ │ - v_FragColor = color; │ │ │ │ + vec2 normal = a_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; │ │ │ │ @@ -28660,37 +28363,32 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ + in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ - in vec3 a_length; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out float v_lengthY; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -28713,27 +28411,19 @@ │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_lineParams.x; │ │ │ │ + vec2 norm = a_normal * u_arrowHalfWidth; │ │ │ │ transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ u_modelView, length(norm)); │ │ │ │ - if (u_lineParams.y != 0.0) │ │ │ │ - len = vec2(a_length.x + a_length.y * u_lineParams.y, a_length.z); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - v_lengthY = len.y; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -28743,137 +28433,24 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_coords; │ │ │ │ - in vec4 v_offset0; │ │ │ │ - in vec4 v_offset1; │ │ │ │ - in vec4 v_offset2; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_smaaArea; │ │ │ │ - uniform sampler2D u_smaaSearch; │ │ │ │ - #define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0) │ │ │ │ - #define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0) │ │ │ │ - #define SMAA_AREATEX_MAX_DISTANCE 16.0 │ │ │ │ - #define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0)) │ │ │ │ - #define SMAALoopBegin(condition) while (condition) { │ │ │ │ - #define SMAALoopEnd } │ │ │ │ - #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ - #define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) │ │ │ │ - #define SMAARound(v) round((v)) │ │ │ │ - #define SMAAOffset(x,y) ivec2(x,y) │ │ │ │ - const vec2 kAreaTexMaxDistance = vec2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE); │ │ │ │ - const float kActivationThreshold = 0.8281; │ │ │ │ - float SMAASearchLength(vec2 e, float offset) │ │ │ │ - vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0); │ │ │ │ - vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0); │ │ │ │ - scale += vec2(-1.0, 1.0); │ │ │ │ - bias += vec2( 0.5, -0.5); │ │ │ │ - scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r; │ │ │ │ - float SMAASearchXLeft(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x > end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(-2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.0); │ │ │ │ - return u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchXRight(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x < end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.5); │ │ │ │ - return -u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchYUp(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y > end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, -2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.0); │ │ │ │ - return u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - float SMAASearchYDown(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y < end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, 2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.5); │ │ │ │ - return -u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - vec2 SMAAArea(vec2 dist, float e1, float e2) │ │ │ │ - vec2 texcoord = kAreaTexMaxDistance * SMAARound(4.0 * vec2(e1, e2)) + dist; │ │ │ │ - texcoord = SMAA_AREATEX_PIXEL_SIZE * (texcoord + 0.5); │ │ │ │ - return SMAASampleLevelZero(u_smaaArea, texcoord).rg; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - vec2 e = texture(u_colorTex, v_coords.xy).rg; │ │ │ │ - if (e.g > 0.0) // Edge at north │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x); │ │ │ │ - coords.y = v_offset1.y; │ │ │ │ - d.x = coords.x; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r; │ │ │ │ - coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 zz = u_framebufferMetrics.zz; │ │ │ │ - d = abs(SMAARound(zz * d - v_coords.zz)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r; │ │ │ │ - weights.rg = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - if (e.r > 0.0) // Edge at west │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z); │ │ │ │ - coords.x = v_offset0.x; │ │ │ │ - d.x = coords.y; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g; │ │ │ │ - coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 ww = u_framebufferMetrics.ww; │ │ │ │ - d = abs(SMAARound(ww * d - v_coords.ww)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g; │ │ │ │ - weights.ba = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - v_FragColor = weights; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec4 v_coords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ - #define SMAA_MAX_SEARCH_STEPS 8.0 │ │ │ │ - const vec4 kMaxSearchSteps = vec4(-2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS, │ │ │ │ - -2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS); │ │ │ │ + in vec3 a_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 │ │ │ │ @@ -28895,19 +28472,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_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); │ │ │ │ + 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; │ │ │ │ @@ -28916,44 +28497,28 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ - in vec4 v_offset0; │ │ │ │ - in vec4 v_offset1; │ │ │ │ - in vec4 v_offset2; │ │ │ │ out vec4 v_FragColor; │ │ │ │ + uniform 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; │ │ │ │ - #define SMAA_THRESHOLD 0.05 │ │ │ │ - const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ - #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ - const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ - float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ - float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ - vec4 delta; │ │ │ │ - delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ - vec2 edges = step(kThreshold, delta.xy); │ │ │ │ - if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ - discard; │ │ │ │ - float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ - float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ - vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ - float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ - float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ - maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ - float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ - edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ - v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ + 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; │ │ │ │ @@ -28961,21 +28526,28 @@ │ │ │ │ #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; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec3 v_radius; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ + uniform float u_opacity; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -28997,63 +28569,28 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - 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; │ │ │ │ - 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; │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + int index = int(a_position.w); │ │ │ │ + float leftSize = u_lightArrowColor[index]; │ │ │ │ + float rightSize = u_darkArrowColor[index]; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * 0.5 * (rightSize - leftSize); │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + v_radius = vec3(a_normal.zw, 1.0) * 0.5 * (leftSize + rightSize); │ │ │ │ + vec2 finalPos = transformedAxisPos + v_radius.xy; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ + vec4 pos = vec4(finalPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29061,19 +28598,28 @@ │ │ │ │ #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 vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec4 a_maskTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ 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 │ │ │ │ @@ -29095,17 +28641,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_colorTexCoords = a_tcoord; │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -29113,81 +28667,59 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ - 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 │ │ │ │ + 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 │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + 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 │ │ │ │ - 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; │ │ │ │ + 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 glyphColor = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + 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 │ │ │ │ - float dist = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ - float alpha = smoothstep(u_contrastGamma.x - u_contrastGamma.y, u_contrastGamma.x + u_contrastGamma.y, dist) * u_opacity; │ │ │ │ - glyphColor.a *= alpha; │ │ │ │ - v_FragColor = glyphColor; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29196,14 +28728,15 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ in vec2 a_maskTexCoord; │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ out vec2 v_colorTexCoord; │ │ │ │ @@ -29213,17 +28746,16 @@ │ │ │ │ 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 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 │ │ │ │ @@ -29245,21 +28777,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -29269,33 +28805,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + 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 │ │ │ │ @@ -29317,24 +28841,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); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ + 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_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29343,15 +28864,14 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ in vec2 a_maskTexCoord; │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ out vec2 v_colorTexCoord; │ │ │ │ @@ -29361,18 +28881,15 @@ │ │ │ │ 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 │ │ │ │ @@ -29394,25 +28911,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float 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 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, colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -29441,16 +28955,18 @@ │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - const float kBaseDepthShift = -10.0; │ │ │ │ + #endif │ │ │ │ + const float 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 │ │ │ │ @@ -29473,20 +28989,20 @@ │ │ │ │ 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); │ │ │ │ + float notOutline = 1.0 - isOutline; │ │ │ │ + float depthShift = BaseDepthShift * isOutline; │ │ │ │ + vec4 pos = (vec4(a_position.xyz, 1) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + vec2 colorTexCoord = a_colorTexCoord * notOutline + a_outlineColorTexCoord * isOutline; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ @@ -29506,35 +29022,36 @@ │ │ │ │ #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 float v_lengthY; │ │ │ │ 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 mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ - uniform sampler2D u_maskTex; │ │ │ │ + uniform float u_azimut; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ 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_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; │ │ │ │ + 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; │ │ │ │ @@ -29543,35 +29060,24 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec3 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - const float kBaseDepthShift = -10.0; │ │ │ │ + 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 │ │ │ │ @@ -29593,30 +29099,46 @@ │ │ │ │ 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); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * u_lineHalfWidth; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + transformedAxisPos += a_normal.zw * u_lineHalfWidth; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_color = a_color; │ │ │ │ + v_radius = vec3(a_normal.zw, u_maxRadius) * u_lineHalfWidth; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + uniform MEDIUM_P sampler2DArray u_colorTex; │ │ │ │ + in vec3 v_texCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + v_FragColor = texture(u_colorTex, v_texCoords); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29624,30 +29146,62 @@ │ │ │ │ #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 float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - finalColor.a *= u_opacity; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + 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; │ │ │ │ @@ -29655,18 +29209,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_normalAndAnimateOrZ; │ │ │ │ + in vec4 a_texCoords; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_texCoords; │ │ │ │ + out vec4 v_maskColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -29696,18 +29252,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ + if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ + normal = u_interpolation * normal; │ │ │ │ + vec4 pivot = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(normal, 0.0, 0.0) * u_projection; │ │ │ │ + vec4 projectedPivot = pivot * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(projectedPivot, u_pivotTransform, 0.0, offset.xy); │ │ │ │ + float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5; │ │ │ │ + gl_Position.z = abs(a_normalAndAnimateOrZ.z) * newZ + (1.0 - abs(a_normalAndAnimateOrZ.z)) * gl_Position.z; │ │ │ │ + v_texCoords = a_texCoords; │ │ │ │ + v_maskColor = a_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29715,30 +29278,41 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ - in float v_intensity; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 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_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + color *= texture(u_maskTex, v_maskTexCoords); │ │ │ │ + color.a *= u_opacity; │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29811,19 +29385,20 @@ │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform 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; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ finalColor.a *= u_opacity; │ │ │ │ v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ @@ -29837,59 +29412,206 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_colorTexCoord; │ │ │ │ + in vec3 v_radius; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + float smallRadius = v_radius.z * kAntialiasingThreshold; │ │ │ │ + float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ + v_radius.x * v_radius.x + v_radius.y * v_radius.y); │ │ │ │ + color.a = u_opacity * (1.0 - stepValue); │ │ │ │ + if (color.a < 0.01) │ │ │ │ + discard; │ │ │ │ + v_FragColor = color; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in 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; │ │ │ │ + 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 │ │ │ │ + #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 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; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ 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; │ │ │ │ + void main() │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 glyphColor = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ #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; │ │ │ │ + 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; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #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_colorTexCoords; │ │ │ │ + in vec4 v_offset0; │ │ │ │ + in vec4 v_offset1; │ │ │ │ + in vec4 v_offset2; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #define SMAA_THRESHOLD 0.05 │ │ │ │ + const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ + #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ + const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - 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; │ │ │ │ + float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ + float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ + float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ + vec4 delta; │ │ │ │ + delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ + vec2 edges = step(kThreshold, delta.xy); │ │ │ │ + if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ + discard; │ │ │ │ + float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ + float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ + vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ + float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ + float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ + maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ + float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ + edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ + v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + in vec4 v_offsets; │ │ │ │ + in vec4 v_color; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 finalColor = v_color; │ │ │ │ + vec2 radius; │ │ │ │ + radius.x = max(0.0, abs(v_offsets.x) - v_offsets.z); │ │ │ │ + radius.y = max(0.0, abs(v_offsets.y) - v_offsets.w); │ │ │ │ + float maxRadius = 1.0; │ │ │ │ + float aaRadius = 0.9; │ │ │ │ + float stepValue = smoothstep(aaRadius * aaRadius, maxRadius * maxRadius, dot(radius.xy, radius.xy)); │ │ │ │ + finalColor.a = finalColor.a * (1.0 - stepValue); │ │ │ │ + v_FragColor = finalColor; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -29898,28 +29620,29 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 v_colorTexCoords; │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_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; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + 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 │ │ │ │ @@ -29929,20 +29652,71 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ + in vec4 v_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - in vec3 v_texCoords; │ │ │ │ + #endif │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const float aaPixelsCount = 2.5; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + float r1 = (v_normal.z - aaPixelsCount) * (v_normal.z - aaPixelsCount); │ │ │ │ + float r2 = v_normal.x * v_normal.x + v_normal.y * v_normal.y; │ │ │ │ + float r3 = v_normal.z * v_normal.z; │ │ │ │ + float alpha = mix(step(r3, r2), smoothstep(r1, r3, r2), v_normal.w); │ │ │ │ + LOW_P vec4 finalColor = color; │ │ │ │ + finalColor.a = finalColor.a * u_opacity * (1.0 - alpha); │ │ │ │ + if (finalColor.a == 0.0) │ │ │ │ + discard; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in float v_intensity; │ │ │ │ out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = texture(u_colorTex, v_texCoords.xy); │ │ │ │ + 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; │ │ │ │ @@ -29950,21 +29724,34 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #define TILE_BACKGROUND_MAX_COUNT 64 │ │ │ │ - out vec3 v_texCoords; │ │ │ │ - uniform vec4 u_tileCoordsMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ - uniform int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoords; │ │ │ │ + out vec4 v_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -29986,20 +29773,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 quadVertex = vec2(gl_VertexID & 1, (gl_VertexID >> 1) & 1); │ │ │ │ - vec4 tileCoordsMinMax = u_tileCoordsMinMax[gl_InstanceID]; │ │ │ │ - vec2 worldPos = mix(tileCoordsMinMax.xy, tileCoordsMinMax.zw, quadVertex); │ │ │ │ - vec4 pos = vec4(worldPos, 0.0, 1.0) * u_modelView * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - v_texCoords = vec3(quadVertex, float(u_textureIndex[gl_InstanceID])); │ │ │ │ + vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ + vec4 pos = vec4(a_normal.xy + a_colorTexCoords.zw, 0, 0) + p; │ │ │ │ + gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + #endif │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30007,20 +29797,23 @@ │ │ │ │ #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; │ │ │ │ + in float v_intensity; │ │ │ │ out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = texture(u_colorTex, v_texCoords); │ │ │ │ + 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; │ │ │ │ @@ -30028,44 +29821,59 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - in vec2 v_maskTexCoord; │ │ │ │ - in float v_halfLength; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + 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_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 kShapeCoordScalar = 1000.0; │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - 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; │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30074,29 +29882,32 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoord; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - out float v_halfLength; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - const float kArrowVSize = 0.25; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30119,27 +29930,24 @@ │ │ │ │ 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 (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; │ │ │ │ + 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 │ │ │ │ @@ -30149,67 +29957,32 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ - in vec3 v_radius; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - float smallRadius = v_radius.z * kAntialiasingThreshold; │ │ │ │ - float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ - v_radius.x * v_radius.x + v_radius.y * v_radius.y); │ │ │ │ - color.a = u_opacity * (1.0 - stepValue); │ │ │ │ - if (color.a < 0.01) │ │ │ │ - discard; │ │ │ │ - v_FragColor = color; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec3 v_radius; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform 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 │ │ │ │ @@ -30231,28 +30004,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - int index = int(a_position.w); │ │ │ │ - float leftSize = u_lightArrowColor[index]; │ │ │ │ - float rightSize = u_darkArrowColor[index]; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * 0.5 * (rightSize - leftSize); │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - v_radius = vec3(a_normal.zw, 1.0) * 0.5 * (leftSize + rightSize); │ │ │ │ - vec2 finalPos = transformedAxisPos + v_radius.xy; │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ - vec4 pos = vec4(finalPos, a_position.z, 1.0) * u_projection; │ │ │ │ + vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30260,30 +30026,112 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoord; │ │ │ │ + in vec4 v_coords; │ │ │ │ + in vec4 v_offset0; │ │ │ │ + in vec4 v_offset1; │ │ │ │ + in vec4 v_offset2; │ │ │ │ out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ - uniform float u_opacity; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_smaaArea; │ │ │ │ + uniform sampler2D u_smaaSearch; │ │ │ │ + #define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0) │ │ │ │ + #define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0) │ │ │ │ + #define SMAA_AREATEX_MAX_DISTANCE 16.0 │ │ │ │ + #define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0)) │ │ │ │ + #define SMAALoopBegin(condition) while (condition) { │ │ │ │ + #define SMAALoopEnd } │ │ │ │ + #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ + #define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) │ │ │ │ + #define SMAARound(v) round((v)) │ │ │ │ + #define SMAAOffset(x,y) ivec2(x,y) │ │ │ │ + const vec2 kAreaTexMaxDistance = vec2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE); │ │ │ │ + const float kActivationThreshold = 0.8281; │ │ │ │ + float SMAASearchLength(vec2 e, float offset) │ │ │ │ + vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0); │ │ │ │ + vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0); │ │ │ │ + scale += vec2(-1.0, 1.0); │ │ │ │ + bias += vec2( 0.5, -0.5); │ │ │ │ + scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ + bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ + return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r; │ │ │ │ + float SMAASearchXLeft(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(0.0, 1.0); │ │ │ │ + SMAALoopBegin(texcoord.x > end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(-2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.0); │ │ │ │ + return u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ + float SMAASearchXRight(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(0.0, 1.0); │ │ │ │ + SMAALoopBegin(texcoord.x < end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.5); │ │ │ │ + return -u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ + float SMAASearchYUp(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(1.0, 0.0); │ │ │ │ + SMAALoopBegin(texcoord.y > end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(0.0, -2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.0); │ │ │ │ + return u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ + float SMAASearchYDown(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(1.0, 0.0); │ │ │ │ + SMAALoopBegin(texcoord.y < end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(0.0, 2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.5); │ │ │ │ + return -u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ + vec2 SMAAArea(vec2 dist, float e1, float e2) │ │ │ │ + vec2 texcoord = kAreaTexMaxDistance * SMAARound(4.0 * vec2(e1, e2)) + dist; │ │ │ │ + texcoord = SMAA_AREATEX_PIXEL_SIZE * (texcoord + 0.5); │ │ │ │ + return SMAASampleLevelZero(u_smaaArea, texcoord).rg; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_colorTexCoord); │ │ │ │ - v_FragColor = vec4(color.rgb, u_opacity); │ │ │ │ + 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; │ │ │ │ @@ -30292,25 +30140,27 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out float v_intensity; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const vec4 kNormalizedLightDir = vec4(0.3162, 0.0, 0.9486, 0.0); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30332,18 +30182,31 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + vec4 normal = vec4(a_position + a_normal, 1.0) * u_modelView; │ │ │ │ + normal.xyw = (normal * u_projection).xyw; │ │ │ │ + normal.z = normal.z * u_zScale; │ │ │ │ + pos.xyw = (pos * u_projection).xyw; │ │ │ │ + pos.z = a_position.z * u_zScale; │ │ │ │ + vec4 normDir = normal - pos; │ │ │ │ + if (dot(normDir, normDir) != 0.0) │ │ │ │ + v_intensity = max(0.0, -dot(kNormalizedLightDir, normalize(normDir))); │ │ │ │ + else │ │ │ │ + v_intensity = 0.0; │ │ │ │ + gl_Position = u_pivotTransform * pos; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30351,19 +30214,50 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_color; │ │ │ │ out vec4 v_FragColor; │ │ │ │ + uniform vec4 u_color; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - v_FragColor = v_color; │ │ │ │ + v_FragColor = u_color; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + in float v_intensity; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + 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; │ │ │ │ @@ -30372,23 +30266,31 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30410,23 +30312,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_lineHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - v_color = a_color; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + pos.xyw = (pos * u_projection).xyw; │ │ │ │ + pos.z = a_position.z * u_zScale; │ │ │ │ + gl_Position = u_pivotTransform * pos; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30434,28 +30340,72 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_radius; │ │ │ │ - in vec4 v_color; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - const float aaPixelsCount = 2.5; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoords; │ │ │ │ + out vec4 v_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = v_color; │ │ │ │ - float smallRadius = v_radius.z - aaPixelsCount; │ │ │ │ - float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z, │ │ │ │ - dot(v_radius.xy, v_radius.xy)); │ │ │ │ - finalColor.a = finalColor.a * (1.0 - stepValue); │ │ │ │ - if (finalColor.a < 0.01) │ │ │ │ - discard; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal.xy + a_colorTexCoords.zw, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, 0.0, offset.xy); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + #endif │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30463,25 +30413,23 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out 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; │ │ │ │ + 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 │ │ │ │ @@ -30503,25 +30451,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_lineHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - transformedAxisPos += a_normal.zw * u_lineHalfWidth; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - v_color = a_color; │ │ │ │ - v_radius = vec3(a_normal.zw, u_maxRadius) * u_lineHalfWidth; │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ + v_texCoords = mix(a_texCoords, 1.0 - a_texCoords, u_texCoordFlipping); │ │ │ │ + gl_Position = position; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30529,28 +30474,64 @@ │ │ │ │ #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; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ + vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ + vec4 transformedPivot = pivot; │ │ │ │ + float w = transformedPivot.w; │ │ │ │ + transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ + transformedPivot.z *= transformedPivot.w / w; │ │ │ │ + #ifdef VULKAN │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ + vec2 d = p - originalAxisPos; │ │ │ │ + if (dot(d, d) != 0.0) │ │ │ │ + return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ + else │ │ │ │ + return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 finalColor = v_color; │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -30558,25 +30539,15 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_offsets; │ │ │ │ - out vec4 v_color; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + in vec2 a_position; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30598,23 +30569,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView; │ │ │ │ - vec2 normal = vec2(a_normal.x * u_params.x - a_normal.y * u_params.y, │ │ │ │ - a_normal.x * u_params.y + a_normal.y * u_params.x); │ │ │ │ - vec2 shiftedPos = normal * u_params.z + pos.xy; │ │ │ │ - pos = vec4(shiftedPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - vec2 offsets = abs(a_normal.zw); │ │ │ │ - v_offsets = vec4(a_normal.zw, offsets - 1.0); │ │ │ │ - v_color = a_color; │ │ │ │ + gl_Position = vec4(a_position, 0, 1); │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30622,35 +30589,22 @@ │ │ │ │ #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 vec2 v_texCoords; │ │ │ │ + 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; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ void main() │ │ │ │ - vec4 color = texture(u_colorTex, v_texCoords.xy); │ │ │ │ - vec4 bgColor = texture(u_colorTex, v_texCoords.zw) * vec4(v_maskColor.xyz, 1.0); │ │ │ │ - vec4 finalColor = mix(color, mix(bgColor, color, color.a), bgColor.a); │ │ │ │ - finalColor.a = clamp(color.a + bgColor.a, 0.0, 1.0) * u_opacity * v_maskColor.w; │ │ │ │ - if (finalColor.a < 0.01) │ │ │ │ - discard; │ │ │ │ - v_FragColor = finalColor; │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_texCoords); │ │ │ │ + v_FragColor = color * v_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -30658,28 +30612,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 vec2 a_position; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ in vec4 a_color; │ │ │ │ - out vec4 v_texCoords; │ │ │ │ - out vec4 v_maskColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ + out vec2 v_texCoords; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30701,25 +30647,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_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; │ │ │ │ + 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; │ │ │ │ @@ -30727,28 +30669,92 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normalAndAnimateOrZ; │ │ │ │ - in vec4 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_texCoords; │ │ │ │ - out vec4 v_maskColor; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + vec4 finalColor = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + finalColor.a *= u_opacity; │ │ │ │ + v_FragColor = finalColor; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + #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 vec2 u_position; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ + uniform sampler2D u_maskTex; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + void main() │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 glyphColor = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord); │ │ │ │ + #endif │ │ │ │ + float dist = texture(u_maskTex, v_maskTexCoord).r; │ │ │ │ + float alpha = smoothstep(u_contrastGamma.x - u_contrastGamma.y, u_contrastGamma.x + u_contrastGamma.y, dist) * u_opacity; │ │ │ │ + glyphColor.a *= alpha; │ │ │ │ + v_FragColor = glyphColor; │ │ │ │ + #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_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -30770,25 +30776,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_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 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; │ │ │ │ N2dp10GpuProgramE │ │ │ │ N3gpu19ProgramParamsSetterE │ │ │ │ N3gpu21GLProgramParamsSetterE │ │ │ │ N3gpu11ProgramPoolE │ │ │ │ N3gpu13GLProgramPoolE │ │ │ │ N2dp6vulkan16VulkanGpuProgramE │ │ │ │ N3gpu6vulkan25VulkanProgramParamsSetterE │ │ │ ├── objdump --line-numbers --disassemble --demangle --reloc --no-show-raw-insn --section=.text {} │ │ │ │ @@ -2267915,917 +2267915,917 @@ │ │ │ │ lea 0x2295da(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1e0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x548534(%rip),%r13 # f846c0 ::id@GLIBCXX_3.4+0x8200> │ │ │ │ mov 0x1f8(%rsp),%rdx │ │ │ │ mov 0x1e0(%rsp),%rsi │ │ │ │ - lea 0x2e8c1d(%rip),%r8 │ │ │ │ - lea 0x2e91b6(%rip),%rcx │ │ │ │ + lea 0x300abd(%rip),%r8 │ │ │ │ + lea 0x3012d6(%rip),%rcx │ │ │ │ mov %r13,%rdi │ │ │ │ call a472c0 │ │ │ │ lea 0x400(%rsp),%rax │ │ │ │ lea 0x2295a8(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x228(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x3e0(%rsp),%rax │ │ │ │ lea 0x22959e(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x210(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x228(%rsp),%rdx │ │ │ │ mov 0x210(%rsp),%rsi │ │ │ │ - lea 0x300379(%rip),%r8 │ │ │ │ - lea 0x3006d2(%rip),%rcx │ │ │ │ + lea 0x2fe819(%rip),%r8 │ │ │ │ + lea 0x301f72(%rip),%rcx │ │ │ │ lea 0x5484fb(%rip),%rdi # f84710 ::id@GLIBCXX_3.4+0x8250> │ │ │ │ call a472c0 │ │ │ │ lea 0x440(%rsp),%rax │ │ │ │ lea 0x229539(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x258(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x420(%rsp),%rax │ │ │ │ lea 0x22952f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x240(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x258(%rsp),%rdx │ │ │ │ mov 0x240(%rsp),%rsi │ │ │ │ - lea 0x2ee7b1(%rip),%r8 │ │ │ │ - lea 0x2eeb6a(%rip),%rcx │ │ │ │ + lea 0x300631(%rip),%r8 │ │ │ │ + lea 0x2e87ea(%rip),%rcx │ │ │ │ lea 0x5484e3(%rip),%rdi # f84760 ::id@GLIBCXX_3.4+0x82a0> │ │ │ │ call a472c0 │ │ │ │ lea 0x480(%rsp),%rax │ │ │ │ lea 0x2294fb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x288(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x460(%rsp),%rax │ │ │ │ lea 0x2294ea(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x270(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x288(%rsp),%rdx │ │ │ │ mov 0x270(%rsp),%rsi │ │ │ │ - lea 0x309389(%rip),%r8 │ │ │ │ - lea 0x309802(%rip),%rcx │ │ │ │ + lea 0x2ee369(%rip),%r8 │ │ │ │ + lea 0x2f16a2(%rip),%rcx │ │ │ │ lea 0x5484cb(%rip),%rdi # f847b0 ::id@GLIBCXX_3.4+0x82f0> │ │ │ │ call a472c0 │ │ │ │ lea 0x4c0(%rsp),%rax │ │ │ │ lea 0x229493(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2b8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x4a0(%rsp),%rax │ │ │ │ lea 0x229482(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2a0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x2b8(%rsp),%rdx │ │ │ │ mov 0x2a0(%rsp),%rsi │ │ │ │ - lea 0x309321(%rip),%r8 │ │ │ │ - lea 0x30979a(%rip),%rcx │ │ │ │ + lea 0x2ee301(%rip),%r8 │ │ │ │ + lea 0x2f163a(%rip),%rcx │ │ │ │ lea 0x5484b3(%rip),%rdi # f84800 ::id@GLIBCXX_3.4+0x8340> │ │ │ │ call a472c0 │ │ │ │ lea 0x500(%rsp),%rax │ │ │ │ lea 0x229447(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2e8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x4e0(%rsp),%rax │ │ │ │ lea 0x229431(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2d0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x2e8(%rsp),%rdx │ │ │ │ mov 0x2d0(%rsp),%rsi │ │ │ │ - lea 0x2fbf59(%rip),%r8 │ │ │ │ - lea 0x2fd972(%rip),%rcx │ │ │ │ + lea 0x2ff559(%rip),%r8 │ │ │ │ + lea 0x2fa692(%rip),%rcx │ │ │ │ lea 0x54849b(%rip),%rdi # f84850 ::id@GLIBCXX_3.4+0x8390> │ │ │ │ call a472c0 │ │ │ │ lea 0x540(%rsp),%rax │ │ │ │ lea 0x2293df(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x318(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x520(%rsp),%rax │ │ │ │ lea 0x2293db(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x300(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x318(%rsp),%rdx │ │ │ │ mov 0x300(%rsp),%rsi │ │ │ │ - lea 0x2fbef1(%rip),%r8 │ │ │ │ - lea 0x2fc3ca(%rip),%rcx │ │ │ │ + lea 0x2ff4f1(%rip),%r8 │ │ │ │ + lea 0x2e4daa(%rip),%rcx │ │ │ │ lea 0x548483(%rip),%rdi # f848a0 ::id@GLIBCXX_3.4+0x83e0> │ │ │ │ call a472c0 │ │ │ │ lea 0x580(%rsp),%rax │ │ │ │ lea 0x22939b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x348(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x560(%rsp),%rax │ │ │ │ lea 0x229392(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x330(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x348(%rsp),%rdx │ │ │ │ mov 0x330(%rsp),%rsi │ │ │ │ - lea 0x2ff069(%rip),%r8 │ │ │ │ - lea 0x2ff522(%rip),%rcx │ │ │ │ + lea 0x309e09(%rip),%r8 │ │ │ │ + lea 0x2ea782(%rip),%rcx │ │ │ │ lea 0x54846b(%rip),%rdi # f848f0 ::id@GLIBCXX_3.4+0x8430> │ │ │ │ call a472c0 │ │ │ │ lea 0x5c0(%rsp),%rax │ │ │ │ lea 0x229333(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x378(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x5a0(%rsp),%rax │ │ │ │ lea 0x22932a(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x360(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x378(%rsp),%rdx │ │ │ │ mov 0x360(%rsp),%rsi │ │ │ │ - lea 0x2ff001(%rip),%r8 │ │ │ │ - lea 0x2ff4ba(%rip),%rcx │ │ │ │ + lea 0x309da1(%rip),%r8 │ │ │ │ + lea 0x2ea71a(%rip),%rcx │ │ │ │ lea 0x548453(%rip),%rdi # f84940 ::id@GLIBCXX_3.4+0x8480> │ │ │ │ call a472c0 │ │ │ │ lea 0x600(%rsp),%rax │ │ │ │ lea 0x2292f7(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x30(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x5e0(%rsp),%rax │ │ │ │ lea 0x22938a(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x18(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x30(%rsp),%rdx │ │ │ │ mov 0x18(%rsp),%rsi │ │ │ │ - lea 0x2fb9c5(%rip),%r8 │ │ │ │ - lea 0x2e253e(%rip),%rcx │ │ │ │ + lea 0x2e6e25(%rip),%r8 │ │ │ │ + lea 0x3030de(%rip),%rcx │ │ │ │ lea 0x548447(%rip),%rdi # f84990 ::id@GLIBCXX_3.4+0x84d0> │ │ │ │ call a472c0 │ │ │ │ lea 0x640(%rsp),%rax │ │ │ │ lea 0x22929b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x60(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x620(%rsp),%rax │ │ │ │ lea 0x22932e(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x48(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x60(%rsp),%rdx │ │ │ │ mov 0x48(%rsp),%rsi │ │ │ │ - lea 0x2fb969(%rip),%r8 │ │ │ │ - lea 0x2e24e2(%rip),%rcx │ │ │ │ + lea 0x2e6dc9(%rip),%r8 │ │ │ │ + lea 0x303082(%rip),%rcx │ │ │ │ lea 0x54843b(%rip),%rdi # f849e0 ::id@GLIBCXX_3.4+0x8520> │ │ │ │ call a472c0 │ │ │ │ lea 0x680(%rsp),%rax │ │ │ │ lea 0x22924f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x90(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x660(%rsp),%rax │ │ │ │ lea 0x229240(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x78(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x90(%rsp),%rdx │ │ │ │ mov 0x78(%rsp),%rsi │ │ │ │ - lea 0x300c27(%rip),%r8 │ │ │ │ - lea 0x2e2e60(%rip),%rcx │ │ │ │ + lea 0x305b47(%rip),%r8 │ │ │ │ + lea 0x304e00(%rip),%rcx │ │ │ │ lea 0x548429(%rip),%rdi # f84a30 ::id@GLIBCXX_3.4+0x8570> │ │ │ │ call a472c0 │ │ │ │ lea 0x6c0(%rsp),%rax │ │ │ │ lea 0x2291dd(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xc0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x6a0(%rsp),%rax │ │ │ │ lea 0x2291e9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xa8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0xc0(%rsp),%rdx │ │ │ │ mov 0xa8(%rsp),%rsi │ │ │ │ - lea 0x2fb89f(%rip),%r8 │ │ │ │ - lea 0x2e3958(%rip),%rcx │ │ │ │ + lea 0x2e6cff(%rip),%r8 │ │ │ │ + lea 0x305e78(%rip),%rcx │ │ │ │ lea 0x548411(%rip),%rdi # f84a80 ::id@GLIBCXX_3.4+0x85c0> │ │ │ │ call a472c0 │ │ │ │ lea 0x700(%rsp),%rax │ │ │ │ lea 0x229440(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xf0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x6e0(%rsp),%rax │ │ │ │ lea 0x22918b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xd8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0xf0(%rsp),%rdx │ │ │ │ mov 0xd8(%rsp),%rsi │ │ │ │ - lea 0x2ed417(%rip),%r8 │ │ │ │ - lea 0x2ed7f0(%rip),%rcx │ │ │ │ + lea 0x2edb97(%rip),%r8 │ │ │ │ + lea 0x3023f0(%rip),%rcx │ │ │ │ lea 0x5483f9(%rip),%rdi # f84ad0 ::id@GLIBCXX_3.4+0x8610> │ │ │ │ call a472c0 │ │ │ │ lea 0x740(%rsp),%rax │ │ │ │ lea 0x22914b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x118(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x720(%rsp),%rax │ │ │ │ lea 0x22913f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x108(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x118(%rsp),%rdx │ │ │ │ mov 0x108(%rsp),%rsi │ │ │ │ - lea 0x30734f(%rip),%r8 │ │ │ │ - lea 0x3076c8(%rip),%rcx │ │ │ │ + lea 0x2e974f(%rip),%r8 │ │ │ │ + lea 0x2fb368(%rip),%rcx │ │ │ │ lea 0x5483e1(%rip),%rdi # f84b20 ::id@GLIBCXX_3.4+0x8660> │ │ │ │ call a472c0 │ │ │ │ lea 0x780(%rsp),%rax │ │ │ │ lea 0x229109(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x140(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x760(%rsp),%rax │ │ │ │ lea 0x2290fa(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x130(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x140(%rsp),%rdx │ │ │ │ mov 0x130(%rsp),%rsi │ │ │ │ - lea 0x2ea0c7(%rip),%r8 │ │ │ │ - lea 0x2ea4a0(%rip),%rcx │ │ │ │ + lea 0x2f1cc7(%rip),%r8 │ │ │ │ + lea 0x2f6ec0(%rip),%rcx │ │ │ │ lea 0x5483c9(%rip),%rdi # f84b70 ::id@GLIBCXX_3.4+0x86b0> │ │ │ │ call a472c0 │ │ │ │ lea 0x7c0(%rsp),%rax │ │ │ │ lea 0x228fae(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x160(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x7a0(%rsp),%rax │ │ │ │ lea 0x2290a2(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x150(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x160(%rsp),%rdx │ │ │ │ mov 0x150(%rsp),%rsi │ │ │ │ - lea 0x2ffd7f(%rip),%r8 │ │ │ │ - lea 0x2f03f8(%rip),%rcx │ │ │ │ + lea 0x2fe21f(%rip),%r8 │ │ │ │ + lea 0x307b38(%rip),%rcx │ │ │ │ lea 0x5483b1(%rip),%rdi # f84bc0 ::id@GLIBCXX_3.4+0x8700> │ │ │ │ call a472c0 │ │ │ │ lea 0x800(%rsp),%rax │ │ │ │ lea 0x228fd5(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x180(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x7e0(%rsp),%rax │ │ │ │ lea 0x229065(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x170(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x180(%rsp),%rdx │ │ │ │ mov 0x170(%rsp),%rsi │ │ │ │ - lea 0x2fb697(%rip),%r8 │ │ │ │ - lea 0x2e2210(%rip),%rcx │ │ │ │ + lea 0x2e6af7(%rip),%r8 │ │ │ │ + lea 0x302db0(%rip),%rcx │ │ │ │ lea 0x548399(%rip),%rdi # f84c10 ::id@GLIBCXX_3.4+0x8750> │ │ │ │ call a472c0 │ │ │ │ lea 0x840(%rsp),%rax │ │ │ │ lea 0x2292ff(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1a0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x820(%rsp),%rax │ │ │ │ lea 0x2292f3(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x190(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x1a0(%rsp),%rdx │ │ │ │ mov 0x190(%rsp),%rsi │ │ │ │ - lea 0x2e67af(%rip),%r8 │ │ │ │ - lea 0x2e6ce8(%rip),%rcx │ │ │ │ + lea 0x2e7c4f(%rip),%r8 │ │ │ │ + lea 0x2ecf48(%rip),%rcx │ │ │ │ lea 0x548381(%rip),%rdi # f84c60 ::id@GLIBCXX_3.4+0x87a0> │ │ │ │ call a472c0 │ │ │ │ lea 0x880(%rsp),%rax │ │ │ │ lea 0x228f99(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1c0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x860(%rsp),%rax │ │ │ │ lea 0x228f8c(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1b0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x1c0(%rsp),%rdx │ │ │ │ mov 0x1b0(%rsp),%rsi │ │ │ │ - lea 0x2eb827(%rip),%r8 │ │ │ │ - lea 0x2ebc80(%rip),%rcx │ │ │ │ + lea 0x2fd2e7(%rip),%r8 │ │ │ │ + lea 0x2ee180(%rip),%rcx │ │ │ │ lea 0x548369(%rip),%rdi # f84cb0 ::id@GLIBCXX_3.4+0x87f0> │ │ │ │ call a472c0 │ │ │ │ lea 0x8c0(%rsp),%rax │ │ │ │ lea 0x228f55(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1e8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x8a0(%rsp),%rax │ │ │ │ lea 0x228f48(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1d0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x1e8(%rsp),%rdx │ │ │ │ mov 0x1d0(%rsp),%rsi │ │ │ │ - lea 0x3015bf(%rip),%r8 │ │ │ │ - lea 0x3018f8(%rip),%rcx │ │ │ │ + lea 0x2eae3f(%rip),%r8 │ │ │ │ + lea 0x2f7838(%rip),%rcx │ │ │ │ lea 0x548351(%rip),%rdi # f84d00 ::id@GLIBCXX_3.4+0x8840> │ │ │ │ call a472c0 │ │ │ │ lea 0x900(%rsp),%rax │ │ │ │ lea 0x228f11(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x218(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x8e0(%rsp),%rax │ │ │ │ lea 0x228efc(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x200(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x218(%rsp),%rdx │ │ │ │ mov 0x200(%rsp),%rsi │ │ │ │ - lea 0x2f5097(%rip),%r8 │ │ │ │ - lea 0x2f53d0(%rip),%rcx │ │ │ │ + lea 0x2f5d37(%rip),%r8 │ │ │ │ + lea 0x2ebe70(%rip),%rcx │ │ │ │ lea 0x548339(%rip),%rdi # f84d50 ::id@GLIBCXX_3.4+0x8890> │ │ │ │ call a472c0 │ │ │ │ lea 0x940(%rsp),%rax │ │ │ │ lea 0x228ebd(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x248(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x920(%rsp),%rax │ │ │ │ lea 0x228eb5(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x230(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x248(%rsp),%rdx │ │ │ │ mov 0x230(%rsp),%rsi │ │ │ │ - lea 0x30212f(%rip),%r8 │ │ │ │ - lea 0x2f0ba8(%rip),%rcx │ │ │ │ + lea 0x2f1dcf(%rip),%r8 │ │ │ │ + lea 0x309cc8(%rip),%rcx │ │ │ │ lea 0x548321(%rip),%rdi # f84da0 ::id@GLIBCXX_3.4+0x88e0> │ │ │ │ call a472c0 │ │ │ │ lea 0x980(%rsp),%rax │ │ │ │ lea 0x228e55(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x278(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x960(%rsp),%rax │ │ │ │ lea 0x228e65(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x260(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x278(%rsp),%rdx │ │ │ │ mov 0x260(%rsp),%rsi │ │ │ │ - lea 0x3020c7(%rip),%r8 │ │ │ │ - lea 0x2ef6a0(%rip),%rcx │ │ │ │ + lea 0x2f1d67(%rip),%r8 │ │ │ │ + lea 0x2e8920(%rip),%rcx │ │ │ │ lea 0x548309(%rip),%rdi # f84df0 ::id@GLIBCXX_3.4+0x8930> │ │ │ │ call a472c0 │ │ │ │ lea 0x9c0(%rsp),%rax │ │ │ │ lea 0x228e2c(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2a8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x9a0(%rsp),%rax │ │ │ │ lea 0x228e20(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x290(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x2a8(%rsp),%rdx │ │ │ │ mov 0x290(%rsp),%rsi │ │ │ │ - lea 0x2f65df(%rip),%r8 │ │ │ │ - lea 0x2f6a58(%rip),%rcx │ │ │ │ + lea 0x2faadf(%rip),%r8 │ │ │ │ + lea 0x2f2378(%rip),%rcx │ │ │ │ lea 0x5482f1(%rip),%rdi # f84e40 ::id@GLIBCXX_3.4+0x8980> │ │ │ │ call a472c0 │ │ │ │ lea 0xa00(%rsp),%rax │ │ │ │ lea 0x228dea(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2d8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x9e0(%rsp),%rax │ │ │ │ lea 0x228dd7(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2c0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x2d8(%rsp),%rdx │ │ │ │ mov 0x2c0(%rsp),%rsi │ │ │ │ - lea 0x3062b7(%rip),%r8 │ │ │ │ - lea 0x306490(%rip),%rcx │ │ │ │ + lea 0x2e9e77(%rip),%r8 │ │ │ │ + lea 0x2f5150(%rip),%rcx │ │ │ │ lea 0x5482d9(%rip),%rdi # f84e90 ::id@GLIBCXX_3.4+0x89d0> │ │ │ │ call a472c0 │ │ │ │ lea 0xa40(%rsp),%rax │ │ │ │ lea 0x228d9a(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x308(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xa20(%rsp),%rax │ │ │ │ lea 0x228d8e(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2f0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x308(%rsp),%rdx │ │ │ │ mov 0x2f0(%rsp),%rsi │ │ │ │ - lea 0x307caf(%rip),%r8 │ │ │ │ - lea 0x308028(%rip),%rcx │ │ │ │ + lea 0x2ff90f(%rip),%r8 │ │ │ │ + lea 0x2e3088(%rip),%rcx │ │ │ │ lea 0x5482c1(%rip),%rdi # f84ee0 ::id@GLIBCXX_3.4+0x8a20> │ │ │ │ call a472c0 │ │ │ │ lea 0xa80(%rsp),%rax │ │ │ │ lea 0x228d58(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x338(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xa60(%rsp),%rax │ │ │ │ lea 0x228d43(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x320(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x338(%rsp),%rdx │ │ │ │ mov 0x320(%rsp),%rsi │ │ │ │ - lea 0x2f1327(%rip),%r8 │ │ │ │ - lea 0x2f1aa0(%rip),%rcx │ │ │ │ + lea 0x2e4fc7(%rip),%r8 │ │ │ │ + lea 0x2ee880(%rip),%rcx │ │ │ │ lea 0x5482a9(%rip),%rdi # f84f30 ::id@GLIBCXX_3.4+0x8a70> │ │ │ │ call a472c0 │ │ │ │ lea 0xac0(%rsp),%rax │ │ │ │ lea 0x228d04(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x368(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xaa0(%rsp),%rax │ │ │ │ lea 0x228cdb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x350(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x368(%rsp),%rdx │ │ │ │ mov 0x350(%rsp),%rsi │ │ │ │ - lea 0x2f361f(%rip),%r8 │ │ │ │ - lea 0x2f1a38(%rip),%rcx │ │ │ │ + lea 0x2fe57f(%rip),%r8 │ │ │ │ + lea 0x2ee818(%rip),%rcx │ │ │ │ lea 0x548291(%rip),%rdi # f84f80 ::id@GLIBCXX_3.4+0x8ac0> │ │ │ │ call a472c0 │ │ │ │ lea 0xb00(%rsp),%rax │ │ │ │ lea 0x228cab(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x20(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xae0(%rsp),%rax │ │ │ │ lea 0x228c9f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x20(%rsp),%rdx │ │ │ │ mov 0x8(%rsp),%rsi │ │ │ │ - lea 0x2f25e3(%rip),%r8 │ │ │ │ - lea 0x2f2a7c(%rip),%rcx │ │ │ │ + lea 0x2e20c3(%rip),%r8 │ │ │ │ + lea 0x2f447c(%rip),%rcx │ │ │ │ lea 0x548285(%rip),%rdi # f84fd0 ::id@GLIBCXX_3.4+0x8b10> │ │ │ │ call a472c0 │ │ │ │ lea 0xb40(%rsp),%rax │ │ │ │ lea 0x228c6f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x50(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xb20(%rsp),%rax │ │ │ │ lea 0x228c64(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x38(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x50(%rsp),%rdx │ │ │ │ mov 0x38(%rsp),%rsi │ │ │ │ - lea 0x2f3c07(%rip),%r8 │ │ │ │ - lea 0x2f41c0(%rip),%rcx │ │ │ │ + lea 0x2f0627(%rip),%r8 │ │ │ │ + lea 0x2eafa0(%rip),%rcx │ │ │ │ lea 0x548279(%rip),%rdi # f85020 ::id@GLIBCXX_3.4+0x8b60> │ │ │ │ call a472c0 │ │ │ │ lea 0xb80(%rsp),%rax │ │ │ │ lea 0x228c35(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x80(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xb60(%rsp),%rax │ │ │ │ lea 0x228c27(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x68(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x80(%rsp),%rdx │ │ │ │ mov 0x68(%rsp),%rsi │ │ │ │ - lea 0x2e7205(%rip),%r8 │ │ │ │ - lea 0x2e763e(%rip),%rcx │ │ │ │ + lea 0x2e6965(%rip),%r8 │ │ │ │ + lea 0x2fb99e(%rip),%rcx │ │ │ │ lea 0x548267(%rip),%rdi # f85070 ::id@GLIBCXX_3.4+0x8bb0> │ │ │ │ call a472c0 │ │ │ │ lea 0xbc0(%rsp),%rax │ │ │ │ lea 0x22896f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xb0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xba0(%rsp),%rax │ │ │ │ lea 0x22895e(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x98(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0xb0(%rsp),%rdx │ │ │ │ mov 0x98(%rsp),%rsi │ │ │ │ - lea 0x3087fd(%rip),%r8 │ │ │ │ - lea 0x308c76(%rip),%rcx │ │ │ │ + lea 0x2ed7dd(%rip),%r8 │ │ │ │ + lea 0x2f0b16(%rip),%rcx │ │ │ │ lea 0x54824f(%rip),%rdi # f850c0 ::id@GLIBCXX_3.4+0x8c00> │ │ │ │ call a472c0 │ │ │ │ lea 0xc00(%rsp),%rax │ │ │ │ lea 0x228907(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xe0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xbe0(%rsp),%rax │ │ │ │ lea 0x2288f6(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xc8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0xe0(%rsp),%rdx │ │ │ │ mov 0xc8(%rsp),%rsi │ │ │ │ - lea 0x308795(%rip),%r8 │ │ │ │ - lea 0x308c0e(%rip),%rcx │ │ │ │ + lea 0x2ed775(%rip),%r8 │ │ │ │ + lea 0x2f0aae(%rip),%rcx │ │ │ │ lea 0x548237(%rip),%rdi # f85110 ::id@GLIBCXX_3.4+0x8c50> │ │ │ │ call a472c0 │ │ │ │ lea 0xc40(%rsp),%rax │ │ │ │ lea 0x228b25(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x110(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xc20(%rsp),%rax │ │ │ │ lea 0x228b15(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xf8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x110(%rsp),%rdx │ │ │ │ mov 0xf8(%rsp),%rsi │ │ │ │ - lea 0x2ea88d(%rip),%r8 │ │ │ │ - lea 0x2eaa66(%rip),%rcx │ │ │ │ + lea 0x30502d(%rip),%r8 │ │ │ │ + lea 0x307e26(%rip),%rcx │ │ │ │ lea 0x54821f(%rip),%rdi # f85160 ::id@GLIBCXX_3.4+0x8ca0> │ │ │ │ call a472c0 │ │ │ │ lea 0xc80(%rsp),%rax │ │ │ │ lea 0x228adb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x138(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xc60(%rsp),%rax │ │ │ │ lea 0x228acc(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x120(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x138(%rsp),%rdx │ │ │ │ mov 0x120(%rsp),%rsi │ │ │ │ - lea 0x2f5785(%rip),%r8 │ │ │ │ - lea 0x2f59fe(%rip),%rcx │ │ │ │ + lea 0x309065(%rip),%r8 │ │ │ │ + lea 0x2e371e(%rip),%rcx │ │ │ │ lea 0x548207(%rip),%rdi # f851b0 ::id@GLIBCXX_3.4+0x8cf0> │ │ │ │ call a472c0 │ │ │ │ lea 0xcc0(%rsp),%rax │ │ │ │ lea 0x228a93(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x158(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xca0(%rsp),%rax │ │ │ │ lea 0x228a80(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x148(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x158(%rsp),%rdx │ │ │ │ mov 0x148(%rsp),%rsi │ │ │ │ - lea 0x2e3a3d(%rip),%r8 │ │ │ │ - lea 0x2e3d36(%rip),%rcx │ │ │ │ + lea 0x2f1bbd(%rip),%r8 │ │ │ │ + lea 0x2f86b6(%rip),%rcx │ │ │ │ lea 0x5481ef(%rip),%rdi # f85200 ::id@GLIBCXX_3.4+0x8d40> │ │ │ │ call a472c0 │ │ │ │ lea 0xd00(%rsp),%rax │ │ │ │ lea 0x228a43(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x178(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xce0(%rsp),%rax │ │ │ │ lea 0x228a39(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x168(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x178(%rsp),%rdx │ │ │ │ mov 0x168(%rsp),%rsi │ │ │ │ - lea 0x2e5355(%rip),%r8 │ │ │ │ - lea 0x2e56ce(%rip),%rcx │ │ │ │ + lea 0x2e3dd5(%rip),%r8 │ │ │ │ + lea 0x30698e(%rip),%rcx │ │ │ │ lea 0x5481d7(%rip),%rdi # f85250 ::id@GLIBCXX_3.4+0x8d90> │ │ │ │ call a472c0 │ │ │ │ lea 0xd40(%rsp),%rax │ │ │ │ lea 0x228a05(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x198(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xd20(%rsp),%rax │ │ │ │ lea 0x2289f9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x188(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x198(%rsp),%rdx │ │ │ │ mov 0x188(%rsp),%rsi │ │ │ │ - lea 0x2e47cd(%rip),%r8 │ │ │ │ - lea 0x2e4a46(%rip),%rcx │ │ │ │ + lea 0x30012d(%rip),%r8 │ │ │ │ + lea 0x2efa46(%rip),%rcx │ │ │ │ lea 0x5481bf(%rip),%rdi # f852a0 ::id@GLIBCXX_3.4+0x8de0> │ │ │ │ call a472c0 │ │ │ │ lea 0xd80(%rsp),%rax │ │ │ │ lea 0x2289c3(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1b8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xd60(%rsp),%rax │ │ │ │ lea 0x228991(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1a8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x1b8(%rsp),%rdx │ │ │ │ mov 0x1a8(%rsp),%rsi │ │ │ │ - lea 0x2e44c5(%rip),%r8 │ │ │ │ - lea 0x2e49de(%rip),%rcx │ │ │ │ + lea 0x300da5(%rip),%r8 │ │ │ │ + lea 0x2ef9de(%rip),%rcx │ │ │ │ lea 0x5481a7(%rip),%rdi # f852f0 ::id@GLIBCXX_3.4+0x8e30> │ │ │ │ call a472c0 │ │ │ │ lea 0xdc0(%rsp),%rax │ │ │ │ lea 0x2285df(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1d8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xda0(%rsp),%rax │ │ │ │ lea 0x228950(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1c8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x1d8(%rsp),%rdx │ │ │ │ mov 0x1c8(%rsp),%rsi │ │ │ │ - lea 0x2e7c1d(%rip),%r8 │ │ │ │ - lea 0x2e8c16(%rip),%rcx │ │ │ │ + lea 0x2ffabd(%rip),%r8 │ │ │ │ + lea 0x305db6(%rip),%rcx │ │ │ │ lea 0x54818f(%rip),%rdi # f85340 ::id@GLIBCXX_3.4+0x8e80> │ │ │ │ call a472c0 │ │ │ │ lea 0xe00(%rsp),%rax │ │ │ │ lea 0x2285a4(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x208(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xde0(%rsp),%rax │ │ │ │ lea 0x228905(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x1f0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x208(%rsp),%rdx │ │ │ │ mov 0x1f0(%rsp),%rsi │ │ │ │ - lea 0x2ff375(%rip),%r8 │ │ │ │ - lea 0x3003ae(%rip),%rcx │ │ │ │ + lea 0x2fd815(%rip),%r8 │ │ │ │ + lea 0x2fce6e(%rip),%rcx │ │ │ │ lea 0x548177(%rip),%rdi # f85390 ::id@GLIBCXX_3.4+0x8ed0> │ │ │ │ call a472c0 │ │ │ │ lea 0xe40(%rsp),%rax │ │ │ │ lea 0x228535(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x238(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xe20(%rsp),%rax │ │ │ │ lea 0x2583cc(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x220(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x238(%rsp),%rdx │ │ │ │ mov 0x220(%rsp),%rsi │ │ │ │ - lea 0x2ed7ad(%rip),%r8 │ │ │ │ - lea 0x2ee506(%rip),%rcx │ │ │ │ + lea 0x2ff62d(%rip),%r8 │ │ │ │ + lea 0x2e2026(%rip),%rcx │ │ │ │ lea 0x54815f(%rip),%rdi # f853e0 ::id@GLIBCXX_3.4+0x8f20> │ │ │ │ call a472c0 │ │ │ │ lea 0xe80(%rsp),%rax │ │ │ │ lea 0x2284f7(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x268(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xe60(%rsp),%rax │ │ │ │ lea 0x22884d(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x250(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x268(%rsp),%rdx │ │ │ │ mov 0x250(%rsp),%rsi │ │ │ │ - lea 0x308385(%rip),%r8 │ │ │ │ - lea 0x3092de(%rip),%rcx │ │ │ │ + lea 0x2ed365(%rip),%r8 │ │ │ │ + lea 0x2fbe3e(%rip),%rcx │ │ │ │ lea 0x548147(%rip),%rdi # f85430 ::id@GLIBCXX_3.4+0x8f70> │ │ │ │ call a472c0 │ │ │ │ lea 0xec0(%rsp),%rax │ │ │ │ lea 0x22848f(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x298(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xea0(%rsp),%rax │ │ │ │ lea 0x2287e5(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x280(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x298(%rsp),%rdx │ │ │ │ mov 0x280(%rsp),%rsi │ │ │ │ - lea 0x30831d(%rip),%r8 │ │ │ │ - lea 0x309276(%rip),%rcx │ │ │ │ + lea 0x2ed2fd(%rip),%r8 │ │ │ │ + lea 0x2fbdd6(%rip),%rcx │ │ │ │ lea 0x54812f(%rip),%rdi # f85480 ::id@GLIBCXX_3.4+0x8fc0> │ │ │ │ call a472c0 │ │ │ │ lea 0xf00(%rsp),%rax │ │ │ │ lea 0x228427(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2c8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xee0(%rsp),%rax │ │ │ │ lea 0x22877d(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2b0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x2c8(%rsp),%rdx │ │ │ │ mov 0x2b0(%rsp),%rsi │ │ │ │ - lea 0x3082b5(%rip),%r8 │ │ │ │ - lea 0x30920e(%rip),%rcx │ │ │ │ + lea 0x2ed295(%rip),%r8 │ │ │ │ + lea 0x2fbd6e(%rip),%rcx │ │ │ │ lea 0x548117(%rip),%rdi # f854d0 ::id@GLIBCXX_3.4+0x9010> │ │ │ │ call a472c0 │ │ │ │ lea 0xf40(%rsp),%rax │ │ │ │ lea 0x2283bf(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2f8(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xf20(%rsp),%rax │ │ │ │ lea 0x228715(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x2e0(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x2f8(%rsp),%rdx │ │ │ │ mov 0x2e0(%rsp),%rsi │ │ │ │ - lea 0x30824d(%rip),%r8 │ │ │ │ - lea 0x3091a6(%rip),%rcx │ │ │ │ + lea 0x2ed22d(%rip),%r8 │ │ │ │ + lea 0x2fbd06(%rip),%rcx │ │ │ │ lea 0x5480ff(%rip),%rdi # f85520 ::id@GLIBCXX_3.4+0x9060> │ │ │ │ call a472c0 │ │ │ │ lea 0xf80(%rsp),%rax │ │ │ │ lea 0x228373(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x328(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xf60(%rsp),%rax │ │ │ │ lea 0x2286c5(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x310(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x328(%rsp),%rdx │ │ │ │ mov 0x310(%rsp),%rsi │ │ │ │ - lea 0x2fae85(%rip),%r8 │ │ │ │ - lea 0x2fd47e(%rip),%rcx │ │ │ │ + lea 0x2fe485(%rip),%r8 │ │ │ │ + lea 0x2f765e(%rip),%rcx │ │ │ │ lea 0x5480e7(%rip),%rdi # f85570 ::id@GLIBCXX_3.4+0x90b0> │ │ │ │ call a472c0 │ │ │ │ lea 0xfc0(%rsp),%rax │ │ │ │ lea 0x22830b(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x358(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xfa0(%rsp),%rax │ │ │ │ lea 0x228679(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x340(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x358(%rsp),%rdx │ │ │ │ mov 0x340(%rsp),%rsi │ │ │ │ - lea 0x2fae1d(%rip),%r8 │ │ │ │ - lea 0x2fbd76(%rip),%rcx │ │ │ │ + lea 0x2fe41d(%rip),%r8 │ │ │ │ + lea 0x2f8a96(%rip),%rcx │ │ │ │ lea 0x5480cf(%rip),%rdi # f855c0 ::id@GLIBCXX_3.4+0x9100> │ │ │ │ call a472c0 │ │ │ │ lea 0x1000(%rsp),%rax │ │ │ │ lea 0x228643(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x10(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0xfe0(%rsp),%rax │ │ │ │ lea 0x228633(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x370(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x10(%rsp),%rdx │ │ │ │ mov 0x370(%rsp),%rsi │ │ │ │ - lea 0x3027fb(%rip),%r8 │ │ │ │ - lea 0x302e94(%rip),%rcx │ │ │ │ + lea 0x2e4e7b(%rip),%r8 │ │ │ │ + lea 0x2f2fb4(%rip),%rcx │ │ │ │ lea 0x5480bd(%rip),%rdi # f85610 ::id@GLIBCXX_3.4+0x9150> │ │ │ │ call a472c0 │ │ │ │ lea 0x1040(%rsp),%rax │ │ │ │ lea 0x2285f9(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x40(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x1020(%rsp),%rax │ │ │ │ lea 0x2285ee(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x28(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x40(%rsp),%rdx │ │ │ │ mov 0x28(%rsp),%rsi │ │ │ │ - lea 0x304bbf(%rip),%r8 │ │ │ │ - lea 0x304f38(%rip),%rcx │ │ │ │ + lea 0x2e14df(%rip),%r8 │ │ │ │ + lea 0x2e65f8(%rip),%rcx │ │ │ │ lea 0x5480b1(%rip),%rdi # f85660 ::id@GLIBCXX_3.4+0x91a0> │ │ │ │ call a472c0 │ │ │ │ lea 0x1080(%rsp),%rax │ │ │ │ lea 0x2285bf(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x70(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x1060(%rsp),%rax │ │ │ │ lea 0x2285b6(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x58(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x70(%rsp),%rdx │ │ │ │ mov 0x58(%rsp),%rsi │ │ │ │ - lea 0x303aa3(%rip),%r8 │ │ │ │ - lea 0x303f7c(%rip),%rcx │ │ │ │ + lea 0x2fd783(%rip),%r8 │ │ │ │ + lea 0x2f547c(%rip),%rcx │ │ │ │ lea 0x5480a5(%rip),%rdi # f856b0 ::id@GLIBCXX_3.4+0x91f0> │ │ │ │ call a472c0 │ │ │ │ lea 0x10c0(%rsp),%rax │ │ │ │ lea 0x228589(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xa0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x10a0(%rsp),%rax │ │ │ │ lea 0x22857e(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x88(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0xa0(%rsp),%rdx │ │ │ │ mov 0x88(%rsp),%rsi │ │ │ │ - lea 0x3018bb(%rip),%r8 │ │ │ │ - lea 0x301ad4(%rip),%rcx │ │ │ │ + lea 0x2ea4bb(%rip),%r8 │ │ │ │ + lea 0x2f24d4(%rip),%rcx │ │ │ │ lea 0x54808d(%rip),%rdi # f85700 ::id@GLIBCXX_3.4+0x9240> │ │ │ │ call a472c0 │ │ │ │ lea 0x1100(%rsp),%rax │ │ │ │ lea 0x228549(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xd0(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x10e0(%rsp),%rax │ │ │ │ lea 0x228516(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xb8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0xd0(%rsp),%rdx │ │ │ │ mov 0xb8(%rsp),%rsi │ │ │ │ - lea 0x302433(%rip),%r8 │ │ │ │ - lea 0x301a6c(%rip),%rcx │ │ │ │ + lea 0x2fae93(%rip),%r8 │ │ │ │ + lea 0x2f246c(%rip),%rcx │ │ │ │ lea 0x548075(%rip),%rdi # f85750 ::id@GLIBCXX_3.4+0x9290> │ │ │ │ call a472c0 │ │ │ │ lea 0x1140(%rsp),%rax │ │ │ │ lea 0x2284fb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x100(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x1120(%rsp),%rax │ │ │ │ lea 0x2284eb(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0xe8(%rsp) │ │ │ │ call a37690 │ │ │ │ mov 0x100(%rsp),%rdx │ │ │ │ mov 0xe8(%rsp),%rsi │ │ │ │ - lea 0x2f890b(%rip),%r8 │ │ │ │ - lea 0x2f9044(%rip),%rcx │ │ │ │ + lea 0x2fe6ab(%rip),%r8 │ │ │ │ + lea 0x2e5324(%rip),%rcx │ │ │ │ lea 0x54805d(%rip),%rdi # f857a0 ::id@GLIBCXX_3.4+0x92e0> │ │ │ │ call a472c0 │ │ │ │ lea 0x1180(%rsp),%rax │ │ │ │ lea 0x2284b1(%rip),%rsi │ │ │ │ mov %rax,%rdi │ │ │ │ mov %rax,0x128(%rsp) │ │ │ │ call a37690 │ │ │ │ lea 0x2284b3(%rip),%rsi │ │ │ │ lea 0x1160(%rsp),%rdi │ │ │ │ call a37690 │ │ │ │ mov 0x128(%rsp),%rdx │ │ │ │ - lea 0x2f6a96(%rip),%r8 │ │ │ │ - lea 0x2f7e8f(%rip),%rcx │ │ │ │ + lea 0x302876(%rip),%r8 │ │ │ │ + lea 0x2ee96f(%rip),%rcx │ │ │ │ lea 0x1160(%rsp),%rsi │ │ │ │ lea 0x548050(%rip),%rdi # f857f0 ::id@GLIBCXX_3.4+0x9330> │ │ │ │ call a472c0 │ │ │ │ lea 0x22848e(%rip),%rsi │ │ │ │ lea 0x11c0(%rsp),%rdi │ │ │ │ call a37690 │ │ │ │ lea 0x228489(%rip),%rsi │ │ │ │ lea 0x11a0(%rsp),%rdi │ │ │ │ call a37690 │ │ │ │ - lea 0x2f98ac(%rip),%r8 │ │ │ │ - lea 0x2f9f05(%rip),%rcx │ │ │ │ + lea 0x2eb9ec(%rip),%r8 │ │ │ │ + lea 0x2e8a25(%rip),%rcx │ │ │ │ lea 0x11c0(%rsp),%rdx │ │ │ │ lea 0x11a0(%rsp),%rsi │ │ │ │ lea 0x54804e(%rip),%rdi # f85840 ::id@GLIBCXX_3.4+0x9380> │ │ │ │ call a472c0 │ │ │ │ lea 0x22845a(%rip),%rsi │ │ │ │ lea 0x1200(%rsp),%rdi │ │ │ │ call a37690 │ │ │ │ lea 0x11e0(%rsp),%rbp │ │ │ │ lea 0x228448(%rip),%rsi │ │ │ │ mov %rbp,%rdi │ │ │ │ call a37690 │ │ │ │ - lea 0x2eb7d7(%rip),%r8 │ │ │ │ - lea 0x2eba30(%rip),%rcx │ │ │ │ + lea 0x307cf7(%rip),%r8 │ │ │ │ + lea 0x307f50(%rip),%rcx │ │ │ │ mov %rbp,%rsi │ │ │ │ lea 0x1200(%rsp),%rdx │ │ │ │ lea 0x54804e(%rip),%rdi # f85890 ::id@GLIBCXX_3.4+0x93d0> │ │ │ │ call a472c0 │ │ │ │ mov %r13,%rsi │ │ │ │ lea 0x53a837(%rip),%rdx │ │ │ │ lea 0x95a8(%rip),%rdi │ │ │ │ @@ -2585409,15 +2585409,15 @@ │ │ │ │ mov %rbx,%rax │ │ │ │ movq $0x1b,0x8(%rbx) │ │ │ │ pop %rbx │ │ │ │ ret │ │ │ │ nop │ │ │ │ cs nopw 0x0(%rax,%rax,1) │ │ │ │ endbr64 │ │ │ │ - mov $0x3f932,%eax │ │ │ │ + mov $0x3f939,%eax │ │ │ │ ret │ │ │ │ nopw 0x0(%rax,%rax,1) │ │ │ │ endbr64 │ │ │ │ test %rdi,%rdi │ │ │ │ je b8abf0 │ │ │ │ mov (%rdi),%rax │ │ │ │ lea -0x4613(%rip),%rdx │ │ │ ├── readelf --wide --decompress --hex-dump=.rodata {} │ │ │ │ @@ -21470,15 +21470,15 @@ │ │ │ │ 0x00ca4db0 7b227365 72766572 73223a5b 22687474 {"servers":["htt │ │ │ │ 0x00ca4dc0 70733a2f 2f63646e 2d6e6c31 2e6f7267 ps://cdn-nl1.org │ │ │ │ 0x00ca4dd0 616e6963 6d617073 2e617070 2f222c22 anicmaps.app/"," │ │ │ │ 0x00ca4de0 68747470 733a2f2f 63646e2d 756b312e https://cdn-uk1. │ │ │ │ 0x00ca4df0 6f726761 6e69636d 6170732e 6170702f organicmaps.app/ │ │ │ │ 0x00ca4e00 222c2268 74747073 3a2f2f63 646e2e6f ","https://cdn.o │ │ │ │ 0x00ca4e10 7267616e 69636d61 70732e61 70702f22 rganicmaps.app/" │ │ │ │ - 0x00ca4e20 32303236 2e30342e 30322d30 2d303030 2026.04.02-0-000 │ │ │ │ + 0x00ca4e20 32303236 2e30342e 30392d30 2d303030 2026.04.09-0-000 │ │ │ │ 0x00ca4e30 302d3030 30303030 30302d4c 696e7578 0-00000000-Linux │ │ │ │ 0x00ca4e40 70726f64 75637473 5f736574 74696e67 products_setting │ │ │ │ 0x00ca4e50 65787061 6e642033 322d6279 7465206b expand 32-byte k │ │ │ │ 0x00ca4e60 00000000 00000000 23000000 00000000 ........#....... │ │ │ │ 0x00ca4e70 22706c61 63655061 67655072 6f6d7074 "placePagePrompt │ │ │ │ 0x00ca4e80 00000000 00000000 0e000000 00000000 ................ │ │ │ │ 0x00ca4e90 01234567 89abcdef fedcba98 76543210 .#Eg........vT2. │ │ │ │ @@ -52665,909 +52665,909 @@ │ │ │ │ 0x00d1eb60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ 0x00d1eb70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ 0x00d1eb80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ 0x00d1eb90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ 0x00d1eba0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ 0x00d1ebb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ 0x00d1ebc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d1ebd0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d1ebe0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d1ebf0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00d1ec00 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00d1ec10 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00d1ec20 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00d1ec30 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00d1ec40 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00d1ec50 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00d1ec60 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d1ec70 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d1ec80 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d1ec90 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d1eca0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d1ecb0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d1ecc0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d1ecd0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d1ece0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00d1ecf0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00d1ed00 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00d1ed10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d1ed20 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00d1ed30 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00d1ed40 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00d1ed50 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00d1ed60 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00d1ed70 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00d1ed80 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00d1ed90 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00d1eda0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d1edb0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d1edc0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00d1edd0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d1ede0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d1edf0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d1ee00 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00d1ee10 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00d1ee20 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00d1ee30 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00d1ee40 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00d1ee50 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00d1ee60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d1ee70 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00d1ee80 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00d1ee90 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d1eea0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d1eeb0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00d1eec0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d1eed0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00d1eee0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00d1eef0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d1ef00 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d1ef10 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00d1ef20 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00d1ef30 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d1ef40 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00d1ef50 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00d1ef60 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00d1ef70 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d1ef80 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00d1ef90 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00d1efa0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00d1efb0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00d1efc0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d1efd0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d1efe0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d1eff0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00d1f000 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00d1f010 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00d1f020 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00d1f030 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00d1f040 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d1f050 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d1f060 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00d1f070 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00d1f080 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00d1f090 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00d1f0a0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d1f0b0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00d1f0c0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d1f0d0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00d1f0e0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d1f0f0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00d1f100 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00d1f110 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00d1f120 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00d1f130 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00d1f140 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d1f150 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00d1f160 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00d1f170 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00d1f180 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00d1f190 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00d1f1a0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d1f1b0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d1f1c0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00d1f1d0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00d1f1e0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00d1f1f0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00d1f200 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00d1f210 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00d1f220 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00d1f230 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00d1f240 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00d1f250 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00d1f260 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00d1f270 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00d1f280 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00d1f290 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d1f2a0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00d1f2b0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00d1f2c0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d1f2d0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00d1f2e0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00d1f2f0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00d1f300 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d1f310 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00d1f320 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d1f330 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00d1f340 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00d1f350 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ - 0x00d1f360 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ - 0x00d1f370 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00d1f380 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00d1f390 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00d1f3a0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d1f3b0 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ - 0x00d1f3c0 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ - 0x00d1f3d0 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ - 0x00d1f3e0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00d1f3f0 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ - 0x00d1f400 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ - 0x00d1f410 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d1f420 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00d1f430 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00d1f440 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ - 0x00d1f450 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d1f460 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d1f470 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d1f480 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d1f490 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d1f4a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d1f4b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d1f4c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d1f4d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d1f4e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d1f4f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d1f500 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d1f510 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d1f520 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d1f530 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d1f540 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d1f550 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d1f560 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d1f570 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d1f580 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d1f590 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d1f5a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d1f5b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d1f5c0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d1f5d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d1f5e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d1f5f0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d1f600 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d1f610 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ - 0x00d1f620 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ - 0x00d1f630 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ - 0x00d1f640 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ - 0x00d1f650 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ - 0x00d1f660 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ - 0x00d1f670 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ - 0x00d1f680 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00d1f690 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ - 0x00d1f6a0 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ - 0x00d1f6b0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d1f6c0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00d1f6d0 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ - 0x00d1f6e0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d1f6f0 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ - 0x00d1f700 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d1f710 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ - 0x00d1f720 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ - 0x00d1f730 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ - 0x00d1f740 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ - 0x00d1f750 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ - 0x00d1f760 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ - 0x00d1f770 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d1f780 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d1f790 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00d1f7a0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d1f7b0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d1f7c0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d1f7d0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00d1f7e0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00d1f7f0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00d1f800 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00d1f810 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00d1f820 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00d1f830 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d1f840 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00d1f850 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00d1f860 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d1f870 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d1f880 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00d1f890 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d1f8a0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00d1f8b0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00d1f8c0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d1f8d0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d1f8e0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00d1f8f0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00d1f900 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d1f910 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00d1f920 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00d1f930 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00d1f940 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d1f950 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00d1f960 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00d1f970 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00d1f980 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00d1f990 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d1f9a0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d1f9b0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d1f9c0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00d1f9d0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00d1f9e0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00d1f9f0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00d1fa00 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00d1fa10 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d1fa20 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d1fa30 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00d1fa40 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00d1fa50 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00d1fa60 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00d1fa70 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d1fa80 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00d1fa90 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d1faa0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00d1fab0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d1fac0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00d1fad0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00d1fae0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00d1faf0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00d1fb00 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00d1fb10 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d1fb20 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00d1fb30 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00d1fb40 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00d1fb50 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00d1fb60 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00d1fb70 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d1fb80 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d1fb90 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00d1fba0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00d1fbb0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00d1fbc0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00d1fbd0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00d1fbe0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00d1fbf0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00d1fc00 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00d1fc10 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00d1fc20 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00d1fc30 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00d1fc40 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00d1fc50 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00d1fc60 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d1fc70 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00d1fc80 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00d1fc90 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d1fca0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00d1fcb0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00d1fcc0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00d1fcd0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d1fce0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00d1fcf0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d1fd00 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00d1fd10 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00d1fd20 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00d1fd30 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ - 0x00d1fd40 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ - 0x00d1fd50 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ - 0x00d1fd60 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ - 0x00d1fd70 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00d1fd80 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ - 0x00d1fd90 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ - 0x00d1fda0 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ - 0x00d1fdb0 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ - 0x00d1fdc0 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ - 0x00d1fdd0 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ - 0x00d1fde0 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ - 0x00d1fdf0 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ - 0x00d1fe00 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ - 0x00d1fe10 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ - 0x00d1fe20 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ - 0x00d1fe30 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ - 0x00d1fe40 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d1fe50 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ - 0x00d1fe60 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ - 0x00d1fe70 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ - 0x00d1fe80 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ - 0x00d1fe90 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ - 0x00d1fea0 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ - 0x00d1feb0 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ - 0x00d1fec0 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ - 0x00d1fed0 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ - 0x00d1fee0 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ - 0x00d1fef0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d1ff00 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ - 0x00d1ff10 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ - 0x00d1ff20 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ - 0x00d1ff30 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d1ff40 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ - 0x00d1ff50 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ - 0x00d1ff60 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ - 0x00d1ff70 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ - 0x00d1ff80 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ - 0x00d1ff90 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ - 0x00d1ffa0 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ - 0x00d1ffb0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d1ffc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d1ffd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d1ffe0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d1fff0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d20000 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d20010 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d20020 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d20030 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d20040 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d20050 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d20060 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d20070 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d20080 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d20090 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d200a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d200b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d200c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d200d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d200e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d200f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d20100 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d20110 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d20120 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d20130 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00d20140 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00d20150 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00d20160 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00d20170 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00d20180 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00d20190 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00d201a0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d201b0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d201c0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d201d0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d201e0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d201f0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d20200 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d20210 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d20220 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00d20230 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00d20240 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00d20250 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d20260 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00d20270 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00d20280 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00d20290 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00d202a0 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00d202b0 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00d202c0 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00d202d0 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00d202e0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d202f0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d20300 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00d20310 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d20320 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d20330 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d20340 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00d20350 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00d20360 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00d20370 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00d20380 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00d20390 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00d203a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d203b0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00d203c0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00d203d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d203e0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d203f0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00d20400 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d20410 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00d20420 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00d20430 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d20440 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d20450 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00d20460 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00d20470 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d20480 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00d20490 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00d204a0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00d204b0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d204c0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00d204d0 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00d204e0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00d204f0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00d20500 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d20510 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d20520 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d20530 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00d20540 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00d20550 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00d20560 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00d20570 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00d20580 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d20590 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d205a0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00d205b0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00d205c0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00d205d0 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00d205e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d205f0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00d20600 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d20610 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00d20620 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d20630 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00d20640 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00d20650 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00d20660 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00d20670 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00d20680 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d20690 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00d206a0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00d206b0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00d206c0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00d206d0 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00d206e0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d206f0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d20700 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00d20710 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00d20720 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00d20730 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00d20740 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00d20750 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00d20760 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00d20770 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00d20780 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00d20790 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00d207a0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00d207b0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00d207c0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00d207d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d207e0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00d207f0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00d20800 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d20810 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00d20820 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00d20830 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00d20840 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d20850 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00d20860 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d20870 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00d20880 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00d20890 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00d208a0 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ - 0x00d208b0 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ - 0x00d208c0 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ - 0x00d208d0 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ - 0x00d208e0 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00d208f0 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ - 0x00d20900 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ - 0x00d20910 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ - 0x00d20920 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ - 0x00d20930 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ - 0x00d20940 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ - 0x00d20950 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ - 0x00d20960 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ - 0x00d20970 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ - 0x00d20980 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ - 0x00d20990 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ - 0x00d209a0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d209b0 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00d209c0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00d209d0 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00d209e0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00d209f0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00d20a00 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00d20a10 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d20a20 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00d20a30 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d20a40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d20a50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d20a60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d20a70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d20a80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d20a90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d20aa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d20ab0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d20ac0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d20ad0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d20ae0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d20af0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d20b00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d20b10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d20b20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d20b30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d20b40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d20b50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d20b60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d20b70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d20b80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d20b90 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00d20ba0 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00d20bb0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d20bc0 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ - 0x00d20bd0 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ - 0x00d20be0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ - 0x00d20bf0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00d20c00 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d20c10 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ - 0x00d20c20 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ - 0x00d20c30 673b200a 2020636f 6e737420 76656333 g; . const vec3 │ │ │ │ - 0x00d20c40 206c6967 68744469 72203d20 76656333 lightDir = vec3 │ │ │ │ - 0x00d20c50 28302e33 31362c20 302e302c 20302e39 (0.316, 0.0, 0.9 │ │ │ │ - 0x00d20c60 3438293b 200a2020 636f6e73 7420666c 48); . const fl │ │ │ │ - 0x00d20c70 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00d20c80 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00d20c90 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d20ca0 20207b20 0a202020 20666c6f 61742070 { . float p │ │ │ │ - 0x00d20cb0 686f6e67 44696666 75736520 3d206d61 hongDiffuse = ma │ │ │ │ - 0x00d20cc0 7828302e 302c202d 646f7428 6c696768 x(0.0, -dot(ligh │ │ │ │ - 0x00d20cd0 74446972 2c20765f 6e6f726d 616c2929 tDir, v_normal)) │ │ │ │ - 0x00d20ce0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00d20cf0 6f72203d 20766563 34282870 686f6e67 or = vec4((phong │ │ │ │ - 0x00d20d00 44696666 75736520 2a20302e 35202b20 Diffuse * 0.5 + │ │ │ │ - 0x00d20d10 302e3529 202a2075 5f636f6c 6f722e72 0.5) * u_color.r │ │ │ │ - 0x00d20d20 67622c20 755f636f 6c6f722e 61293b20 gb, u_color.a); │ │ │ │ - 0x00d20d30 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d20d40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d20d50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d20d60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d20d70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d20d80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d20d90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d20da0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d20db0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d20dc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d20dd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d20de0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d20df0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d20e00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d20e10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d20e20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d20e30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d20e40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d20e50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d20e60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d20e70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d20e80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d20e90 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00d20ea0 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00d20eb0 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ - 0x00d20ec0 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ - 0x00d20ed0 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ - 0x00d20ee0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d20ef0 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ - 0x00d20f00 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d20f10 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ - 0x00d20f20 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00d20f30 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ - 0x00d20f40 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d20f50 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d20f60 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d20f70 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00d20f80 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00d20f90 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00d20fa0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00d20fb0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00d20fc0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d20fd0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d20fe0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00d20ff0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00d21000 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00d21010 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d21020 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00d21030 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00d21040 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00d21050 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00d21060 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00d21070 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00d21080 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d21090 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00d210a0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00d210b0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d210c0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00d210d0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00d210e0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d210f0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00d21100 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00d21110 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00d21120 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d21130 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00d21140 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00d21150 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00d21160 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d21170 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d21180 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d21190 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d211a0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00d211b0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00d211c0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00d211d0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00d211e0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00d211f0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d21200 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d21210 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00d21220 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00d21230 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00d21240 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00d21250 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00d21260 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00d21270 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d21280 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00d21290 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d212a0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00d212b0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00d212c0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00d212d0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00d212e0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00d212f0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d21300 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00d21310 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00d21320 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00d21330 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00d21340 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00d21350 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d21360 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00d21370 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00d21380 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00d21390 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00d213a0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00d213b0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00d213c0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00d213d0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00d213e0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00d213f0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00d21400 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00d21410 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00d21420 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00d21430 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00d21440 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00d21450 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00d21460 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00d21470 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d21480 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00d21490 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00d214a0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00d214b0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d214c0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00d214d0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d214e0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d214f0 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ - 0x00d21500 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ - 0x00d21510 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ - 0x00d21520 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ - 0x00d21530 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ - 0x00d21540 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ - 0x00d21550 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ - 0x00d21560 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d21570 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ - 0x00d21580 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d21590 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ - 0x00d215a0 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ - 0x00d215b0 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ - 0x00d215c0 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ - 0x00d215d0 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ - 0x00d215e0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00d215f0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00d21600 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d21610 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d21620 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d21630 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d21640 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d21650 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d21660 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d21670 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d21680 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d21690 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d216a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d216b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d216c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d216d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d216e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d216f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d21700 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d21710 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d21720 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d21730 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d21740 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ - 0x00d21750 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ - 0x00d21760 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d21770 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d21780 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ - 0x00d21790 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d217a0 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ - 0x00d217b0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d217c0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00d217d0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d217e0 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ - 0x00d217f0 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ - 0x00d21800 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d21810 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d21820 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d21830 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ - 0x00d21840 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ - 0x00d21850 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ - 0x00d21860 6f722e61 202a2073 6d6f6f74 68737465 or.a * smoothste │ │ │ │ - 0x00d21870 7028302e 372c2031 2e302c20 765f696e p(0.7, 1.0, v_in │ │ │ │ - 0x00d21880 74656e73 69747929 293b200a 20207d20 tensity)); . } │ │ │ │ - 0x00d21890 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d218a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d218b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d218c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d218d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d218e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d218f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d21900 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d21910 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d21920 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d21930 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d21940 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d21950 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d21960 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d21970 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d21980 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d21990 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d219a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d219b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d219c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d219d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d219e0 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ - 0x00d219f0 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ - 0x00d21a00 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d21a10 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d21a20 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ - 0x00d21a30 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d21a40 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ - 0x00d21a50 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d21a60 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00d21a70 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d21a80 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ - 0x00d21a90 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ - 0x00d21aa0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d21ab0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d21ac0 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d21ad0 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ - 0x00d21ae0 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ - 0x00d21af0 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ - 0x00d21b00 6f722e61 202a2076 5f696e74 656e7369 or.a * v_intensi │ │ │ │ - 0x00d21b10 7479293b 200a2020 7d200a00 00000000 ty); . } ...... │ │ │ │ - 0x00d21b20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d21b30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d21b40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d21b50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d21b60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d21b70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d21b80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d21b90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d21ba0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d21bb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d21bc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d21bd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d21be0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d21bf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d21c00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d21c10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d21c20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d21c30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d21c40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d21c50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d21c60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d21c70 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00d21c80 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ - 0x00d21c90 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ - 0x00d21ca0 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ - 0x00d21cb0 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ - 0x00d21cc0 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ - 0x00d21cd0 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ - 0x00d21ce0 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ - 0x00d21cf0 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ - 0x00d21d00 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d21d10 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ - 0x00d21d20 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ - 0x00d21d30 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d21d40 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d21d50 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00d21d60 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d21d70 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d21d80 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d21d90 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d21da0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00d21db0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d21dc0 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00d21dd0 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00d21de0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00d21df0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d21e00 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00d21e10 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d21e20 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d21e30 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d21e40 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00d21e50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d21e60 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00d21e70 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00d21e80 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d21e90 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d21ea0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00d21eb0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00d21ec0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d21ed0 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00d21ee0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00d21ef0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d21f00 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d21f10 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d21f20 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d21f30 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00d21f40 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d21f50 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d21f60 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d21f70 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d21f80 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00d21f90 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00d21fa0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00d21fb0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00d21fc0 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00d21fd0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d21fe0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00d21ff0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00d22000 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d22010 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00d22020 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00d22030 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d22040 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00d22050 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00d22060 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00d22070 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d22080 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00d22090 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00d220a0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00d220b0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00d220c0 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00d220d0 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00d220e0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00d220f0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00d22100 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00d22110 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00d22120 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00d22130 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00d22140 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d22150 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00d22160 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00d22170 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00d22180 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00d22190 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00d221a0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00d221b0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00d221c0 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00d221d0 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00d221e0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00d221f0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00d22200 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d22210 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00d22220 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d22230 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00d22240 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00d22250 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00d22260 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00d22270 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00d22280 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00d22290 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d222a0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d222b0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00d222c0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d222d0 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ - 0x00d222e0 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ - 0x00d222f0 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ - 0x00d22300 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ - 0x00d22310 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ - 0x00d22320 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00d22330 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ - 0x00d22340 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d22350 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00d22360 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00d22370 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d22380 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00d22390 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ - 0x00d223a0 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ - 0x00d223b0 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ + 0x00d1ebd0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d1ebe0 72643b20 0a20206f 75742076 65633420 rd; . out vec4 │ │ │ │ + 0x00d1ebf0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d1ec00 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d1ec10 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d1ec20 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d1ec30 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d1ec40 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d1ec50 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d1ec60 666f726d 20766563 3420755f 74726166 form vec4 u_traf │ │ │ │ + 0x00d1ec70 66696350 6172616d 733b200a 2020756e ficParams; . un │ │ │ │ + 0x00d1ec80 69666f72 6d207665 63342075 5f6f7574 iform vec4 u_out │ │ │ │ + 0x00d1ec90 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00d1eca0 69666f72 6d207665 63342075 5f6c6967 iform vec4 u_lig │ │ │ │ + 0x00d1ecb0 68744172 726f7743 6f6c6f72 3b200a20 htArrowColor; . │ │ │ │ + 0x00d1ecc0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d1ecd0 6461726b 4172726f 77436f6c 6f723b20 darkArrowColor; │ │ │ │ + 0x00d1ece0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d1ecf0 20755f6f 75746c69 6e653b20 0a202075 u_outline; . u │ │ │ │ + 0x00d1ed00 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00d1ed10 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00d1ed20 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d1ed30 6f6c6f72 5465783b 200a2020 636f6e73 olorTex; . cons │ │ │ │ + 0x00d1ed40 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d1ed50 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d1ed60 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ + 0x00d1ed70 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d1ed80 3420636f 6c6f7220 3d207465 78747572 4 color = textur │ │ │ │ + 0x00d1ed90 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d1eda0 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00d1edb0 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00d1edc0 203d2076 65633428 636f6c6f 722e7267 = vec4(color.rg │ │ │ │ + 0x00d1edd0 622c2075 5f6f7061 63697479 293b200a b, u_opacity); . │ │ │ │ + 0x00d1ede0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d1edf0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d1ee00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d1ee10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d1ee20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d1ee30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d1ee40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d1ee50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d1ee60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d1ee70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d1ee80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d1ee90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d1eea0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d1eeb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d1eec0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d1eed0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d1eee0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d1eef0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d1ef00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d1ef10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d1ef20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d1ef30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d1ef40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d1ef50 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d1ef60 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d1ef70 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d1ef80 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d1ef90 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d1efa0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d1efb0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d1efc0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d1efd0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d1efe0 69666f72 6d207665 63342075 5f726f75 iform vec4 u_rou │ │ │ │ + 0x00d1eff0 74655061 72616d73 3b200a20 20756e69 teParams; . uni │ │ │ │ + 0x00d1f000 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d1f010 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d1f020 63342075 5f6d6173 6b436f6c 6f723b20 c4 u_maskColor; │ │ │ │ + 0x00d1f030 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d1f040 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d1f050 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d1f060 755f6661 6b65436f 6c6f723b 200a2020 u_fakeColor; . │ │ │ │ + 0x00d1f070 756e6966 6f726d20 76656334 20755f66 uniform vec4 u_f │ │ │ │ + 0x00d1f080 616b654f 75746c69 6e65436f 6c6f723b akeOutlineColor; │ │ │ │ + 0x00d1f090 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d1f0a0 20755f66 616b6542 6f726465 72733b20 u_fakeBorders; │ │ │ │ + 0x00d1f0b0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d1f0c0 755f7061 74746572 6e3b200a 2020756e u_pattern; . un │ │ │ │ + 0x00d1f0d0 69666f72 6d207665 63322075 5f616e67 iform vec2 u_ang │ │ │ │ + 0x00d1f0e0 6c65436f 7353696e 3b200a20 20756e69 leCosSin; . uni │ │ │ │ + 0x00d1f0f0 666f726d 20666c6f 61742075 5f617272 form float u_arr │ │ │ │ + 0x00d1f100 6f774861 6c665769 6474683b 200a2020 owHalfWidth; . │ │ │ │ + 0x00d1f110 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d1f120 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d1f130 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d1f140 636f6c6f 72546578 3b200a20 20636f6e colorTex; . con │ │ │ │ + 0x00d1f150 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d1f160 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d1f170 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d1f180 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00d1f190 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ + 0x00d1f1a0 74657874 75726528 755f636f 6c6f7254 texture(u_colorT │ │ │ │ + 0x00d1f1b0 65782c20 765f636f 6c6f7254 6578436f ex, v_colorTexCo │ │ │ │ + 0x00d1f1c0 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ + 0x00d1f1d0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ + 0x00d1f1e0 61636974 793b200a 20202020 69662028 acity; . if ( │ │ │ │ + 0x00d1f1f0 66696e61 6c436f6c 6f722e61 203c2030 finalColor.a < 0 │ │ │ │ + 0x00d1f200 2e303129 200a2020 20202020 64697363 .01) . disc │ │ │ │ + 0x00d1f210 6172643b 200a2020 20206669 6e616c43 ard; . finalC │ │ │ │ + 0x00d1f220 6f6c6f72 203d2076 65633428 6d697828 olor = vec4(mix( │ │ │ │ + 0x00d1f230 66696e61 6c436f6c 6f722e72 67622c20 finalColor.rgb, │ │ │ │ + 0x00d1f240 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ + 0x00d1f250 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ + 0x00d1f260 2066696e 616c436f 6c6f722e 61293b20 finalColor.a); │ │ │ │ + 0x00d1f270 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00d1f280 203d2066 696e616c 436f6c6f 723b200a = finalColor; . │ │ │ │ + 0x00d1f290 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d1f2a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d1f2b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d1f2c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d1f2d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d1f2e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d1f2f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d1f300 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d1f310 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d1f320 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d1f330 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d1f340 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d1f350 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d1f360 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d1f370 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d1f380 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d1f390 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d1f3a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d1f3b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d1f3c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d1f3d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d1f3e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d1f3f0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d1f400 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d1f410 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d1f420 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d1f430 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00d1f440 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00d1f450 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00d1f460 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00d1f470 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d1f480 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d1f490 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d1f4a0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d1f4b0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d1f4c0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d1f4d0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d1f4e0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d1f4f0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d1f500 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d1f510 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d1f520 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d1f530 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d1f540 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d1f550 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d1f560 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d1f570 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d1f580 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d1f590 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d1f5a0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d1f5b0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d1f5c0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d1f5d0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d1f5e0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d1f5f0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d1f600 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d1f610 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d1f620 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d1f630 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d1f640 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d1f650 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d1f660 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d1f670 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d1f680 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d1f690 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d1f6a0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d1f6b0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d1f6c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d1f6d0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d1f6e0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d1f6f0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d1f700 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d1f710 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d1f720 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d1f730 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d1f740 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d1f750 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d1f760 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d1f770 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d1f780 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d1f790 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d1f7a0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d1f7b0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d1f7c0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d1f7d0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d1f7e0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d1f7f0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d1f800 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d1f810 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d1f820 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d1f830 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d1f840 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d1f850 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d1f860 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d1f870 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d1f880 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d1f890 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d1f8a0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d1f8b0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d1f8c0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d1f8d0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d1f8e0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d1f8f0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d1f900 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d1f910 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d1f920 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d1f930 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d1f940 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d1f950 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d1f960 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d1f970 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d1f980 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d1f990 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d1f9a0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d1f9b0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d1f9c0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d1f9d0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d1f9e0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d1f9f0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d1fa00 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d1fa10 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d1fa20 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d1fa30 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d1fa40 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d1fa50 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d1fa60 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d1fa70 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d1fa80 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d1fa90 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d1faa0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d1fab0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d1fac0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d1fad0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d1fae0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d1faf0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d1fb00 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d1fb10 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d1fb20 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d1fb30 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d1fb40 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d1fb50 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d1fb60 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d1fb70 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00d1fb80 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d1fb90 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d1fba0 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00d1fbb0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d1fbc0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00d1fbd0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d1fbe0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00d1fbf0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d1fc00 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d1fc10 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00d1fc20 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00d1fc30 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00d1fc40 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00d1fc50 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00d1fc60 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d1fc70 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00d1fc80 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00d1fc90 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d1fca0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d1fcb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d1fcc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d1fcd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d1fce0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d1fcf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d1fd00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d1fd10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d1fd20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d1fd30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d1fd40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d1fd50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d1fd60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d1fd70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d1fd80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d1fd90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d1fda0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d1fdb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d1fdc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d1fdd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d1fde0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d1fdf0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d1fe00 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d1fe10 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d1fe20 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d1fe30 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ + 0x00d1fe40 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ + 0x00d1fe50 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ + 0x00d1fe60 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d1fe70 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d1fe80 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d1fe90 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d1fea0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d1feb0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d1fec0 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ + 0x00d1fed0 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ + 0x00d1fee0 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ + 0x00d1fef0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d1ff00 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ + 0x00d1ff10 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d1ff20 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d1ff30 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00d1ff40 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d1ff50 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d1ff60 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d1ff70 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d1ff80 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00d1ff90 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d1ffa0 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00d1ffb0 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00d1ffc0 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00d1ffd0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d1ffe0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00d1fff0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d20000 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d20010 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d20020 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00d20030 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d20040 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00d20050 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00d20060 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d20070 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00d20080 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00d20090 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00d200a0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d200b0 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00d200c0 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00d200d0 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00d200e0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00d200f0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d20100 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00d20110 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00d20120 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00d20130 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d20140 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d20150 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d20160 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d20170 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00d20180 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00d20190 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00d201a0 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00d201b0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d201c0 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00d201d0 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00d201e0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d201f0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00d20200 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00d20210 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d20220 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00d20230 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00d20240 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d20250 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d20260 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00d20270 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00d20280 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00d20290 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00d202a0 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00d202b0 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00d202c0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d202d0 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00d202e0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d202f0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00d20300 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00d20310 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00d20320 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d20330 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00d20340 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00d20350 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00d20360 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00d20370 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00d20380 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00d20390 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00d203a0 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00d203b0 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00d203c0 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00d203d0 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00d203e0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d203f0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00d20400 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d20410 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00d20420 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00d20430 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d20440 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00d20450 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00d20460 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00d20470 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d20480 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d20490 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00d204a0 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00d204b0 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ + 0x00d204c0 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ + 0x00d204d0 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00d204e0 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ + 0x00d204f0 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ + 0x00d20500 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ + 0x00d20510 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ + 0x00d20520 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ + 0x00d20530 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d20540 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ + 0x00d20550 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ + 0x00d20560 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ + 0x00d20570 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ + 0x00d20580 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ + 0x00d20590 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ + 0x00d205a0 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ + 0x00d205b0 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ + 0x00d205c0 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ + 0x00d205d0 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ + 0x00d205e0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d205f0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d20600 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d20610 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ + 0x00d20620 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ + 0x00d20630 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ + 0x00d20640 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ + 0x00d20650 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ + 0x00d20660 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ + 0x00d20670 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ + 0x00d20680 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ + 0x00d20690 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ + 0x00d206a0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d206b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d206c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d206d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d206e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d206f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d20700 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d20710 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d20720 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d20730 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d20740 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d20750 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d20760 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d20770 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d20780 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d20790 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d207a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d207b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d207c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d207d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d207e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d207f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d20800 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d20810 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d20820 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d20830 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d20840 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d20850 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d20860 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d20870 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00d20880 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d20890 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d208a0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d208b0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d208c0 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00d208d0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d208e0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00d208f0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00d20900 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d20910 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d20920 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00d20930 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d20940 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d20950 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00d20960 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00d20970 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d20980 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00d20990 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00d209a0 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00d209b0 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00d209c0 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00d209d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d209e0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00d209f0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00d20a00 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d20a10 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00d20a20 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00d20a30 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d20a40 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00d20a50 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00d20a60 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00d20a70 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00d20a80 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d20a90 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d20aa0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d20ab0 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00d20ac0 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00d20ad0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00d20ae0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00d20af0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d20b00 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00d20b10 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d20b20 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00d20b30 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00d20b40 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00d20b50 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00d20b60 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00d20b70 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00d20b80 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00d20b90 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00d20ba0 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00d20bb0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d20bc0 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00d20bd0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00d20be0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00d20bf0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00d20c00 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d20c10 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00d20c20 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00d20c30 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00d20c40 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00d20c50 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00d20c60 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d20c70 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00d20c80 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00d20c90 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d20ca0 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00d20cb0 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00d20cc0 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00d20cd0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00d20ce0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00d20cf0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d20d00 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00d20d10 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d20d20 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00d20d30 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00d20d40 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00d20d50 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00d20d60 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00d20d70 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d20d80 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00d20d90 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00d20da0 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00d20db0 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00d20dc0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d20dd0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00d20de0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d20df0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d20e00 203d2061 5f74636f 6f72643b 200a2020 = a_tcoord; . │ │ │ │ + 0x00d20e10 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d20e20 76656334 28615f70 6f732c20 302e302c vec4(a_pos, 0.0, │ │ │ │ + 0x00d20e30 20312e30 293b200a 20207d20 0a000000 1.0); . } .... │ │ │ │ + 0x00d20e40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d20e50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d20e60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d20e70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d20e80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d20e90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d20ea0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d20eb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d20ec0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d20ed0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d20ee0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d20ef0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d20f00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d20f10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d20f20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d20f30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d20f40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d20f50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d20f60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d20f70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d20f80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d20f90 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d20fa0 696e2076 65633220 765f7465 78436f6f in vec2 v_texCoo │ │ │ │ + 0x00d20fb0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d20fc0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d20fd0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d20fe0 7472616e 73666f72 6d3b200a 2020756e transform; . un │ │ │ │ + 0x00d20ff0 69666f72 6d206d61 74342075 5f6e6f72 iform mat4 u_nor │ │ │ │ + 0x00d21000 6d616c54 72616e73 666f726d 3b200a20 malTransform; . │ │ │ │ + 0x00d21010 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d21020 636f6c6f 723b200a 2020756e 69666f72 color; . unifor │ │ │ │ + 0x00d21030 6d207665 63322075 5f746578 436f6f72 m vec2 u_texCoor │ │ │ │ + 0x00d21040 64466c69 7070696e 673b200a 2020756e dFlipping; . un │ │ │ │ + 0x00d21050 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d21060 755f636f 6c6f7254 65783b20 0a202063 u_colorTex; . c │ │ │ │ + 0x00d21070 6f6e7374 20766563 33206c69 67687444 onst vec3 lightD │ │ │ │ + 0x00d21080 6972203d 20766563 3328302e 3331362c ir = vec3(0.316, │ │ │ │ + 0x00d21090 20302e30 2c20302e 39343829 3b200a20 0.0, 0.948); . │ │ │ │ + 0x00d210a0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d210b0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d210c0 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d210d0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d210e0 2020666c 6f617420 70686f6e 67446966 float phongDif │ │ │ │ + 0x00d210f0 66757365 203d206d 61782830 2e302c20 fuse = max(0.0, │ │ │ │ + 0x00d21100 2d646f74 286c6967 68744469 722c2076 -dot(lightDir, v │ │ │ │ + 0x00d21110 5f6e6f72 6d616c29 293b200a 20202020 _normal)); . │ │ │ │ + 0x00d21120 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ + 0x00d21130 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ + 0x00d21140 20765f74 6578436f 6f726473 29202a20 v_texCoords) * │ │ │ │ + 0x00d21150 755f636f 6c6f723b 200a2020 2020765f u_color; . v_ │ │ │ │ + 0x00d21160 46726167 436f6c6f 72203d20 76656334 FragColor = vec4 │ │ │ │ + 0x00d21170 28287068 6f6e6744 69666675 7365202a ((phongDiffuse * │ │ │ │ + 0x00d21180 20302e35 202b2030 2e352920 2a20636f 0.5 + 0.5) * co │ │ │ │ + 0x00d21190 6c6f722e 7267622c 20636f6c 6f722e61 lor.rgb, color.a │ │ │ │ + 0x00d211a0 293b200a 20207d20 0a000000 00000000 ); . } ........ │ │ │ │ + 0x00d211b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d211c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d211d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d211e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d211f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d21200 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d21210 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d21220 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d21230 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d21240 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d21250 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d21260 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d21270 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d21280 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d21290 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d212a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d212b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d212c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d212d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d212e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d212f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d21300 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d21310 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d21320 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d21330 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d21340 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00d21350 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00d21360 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00d21370 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d21380 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00d21390 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00d213a0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00d213b0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00d213c0 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00d213d0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d213e0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00d213f0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d21400 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d21410 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d21420 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d21430 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d21440 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d21450 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d21460 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d21470 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d21480 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d21490 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d214a0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d214b0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d214c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d214d0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d214e0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d214f0 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ + 0x00d21500 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ + 0x00d21510 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ + 0x00d21520 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d21530 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d21540 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00d21550 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00d21560 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d21570 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d21580 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d21590 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00d215a0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d215b0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d215c0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00d215d0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d215e0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00d215f0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00d21600 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00d21610 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00d21620 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00d21630 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00d21640 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d21650 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00d21660 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d21670 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00d21680 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00d21690 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00d216a0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00d216b0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00d216c0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00d216d0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d216e0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00d216f0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00d21700 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d21710 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00d21720 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00d21730 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00d21740 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00d21750 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d21760 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d21770 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d21780 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00d21790 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00d217a0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00d217b0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00d217c0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d217d0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d217e0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d217f0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00d21800 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00d21810 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00d21820 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00d21830 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00d21840 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00d21850 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d21860 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00d21870 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00d21880 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d21890 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00d218a0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00d218b0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00d218c0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00d218d0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d218e0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00d218f0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00d21900 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00d21910 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00d21920 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00d21930 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d21940 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00d21950 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00d21960 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d21970 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00d21980 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d21990 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00d219a0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00d219b0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00d219c0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00d219d0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00d219e0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00d219f0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00d21a00 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00d21a10 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00d21a20 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00d21a30 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00d21a40 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00d21a50 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00d21a60 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00d21a70 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00d21a80 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00d21a90 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d21aa0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00d21ab0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00d21ac0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d21ad0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00d21ae0 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ + 0x00d21af0 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ + 0x00d21b00 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ + 0x00d21b10 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ + 0x00d21b20 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ + 0x00d21b30 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d21b40 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d21b50 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ + 0x00d21b60 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00d21b70 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d21b80 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d21b90 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00d21ba0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00d21bb0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00d21bc0 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00d21bd0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00d21be0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d21bf0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00d21c00 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d21c10 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ + 0x00d21c20 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ + 0x00d21c30 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d21c40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d21c50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d21c60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d21c70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d21c80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d21c90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d21ca0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d21cb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d21cc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d21cd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d21ce0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d21cf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d21d00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d21d10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d21d20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d21d30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d21d40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d21d50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d21d60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d21d70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d21d80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d21d90 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00d21da0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d21db0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d21dc0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d21dd0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d21de0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d21df0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d21e00 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d21e10 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d21e20 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d21e30 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d21e40 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d21e50 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d21e60 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d21e70 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d21e80 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d21e90 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d21ea0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d21eb0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d21ec0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d21ed0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d21ee0 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d21ef0 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d21f00 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d21f10 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d21f20 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d21f30 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d21f40 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d21f50 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d21f60 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d21f70 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d21f80 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d21f90 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00d21fa0 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ + 0x00d21fb0 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ + 0x00d21fc0 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ + 0x00d21fd0 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ + 0x00d21fe0 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ + 0x00d21ff0 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ + 0x00d22000 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d22010 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d22020 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d22030 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ + 0x00d22040 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ + 0x00d22050 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ + 0x00d22060 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ + 0x00d22070 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ + 0x00d22080 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ + 0x00d22090 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ + 0x00d220a0 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ + 0x00d220b0 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ + 0x00d220c0 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ + 0x00d220d0 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ + 0x00d220e0 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ + 0x00d220f0 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ + 0x00d22100 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ + 0x00d22110 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ + 0x00d22120 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00d22130 76656334 206d6169 6e4f7574 6c696e65 vec4 mainOutline │ │ │ │ + 0x00d22140 436f6c6f 72203d20 6d697828 755f6f75 Color = mix(u_ou │ │ │ │ + 0x00d22150 746c696e 65436f6c 6f722c20 755f6661 tlineColor, u_fa │ │ │ │ + 0x00d22160 6b654f75 746c696e 65436f6c 6f722c20 keOutlineColor, │ │ │ │ + 0x00d22170 636f6566 732e7829 3b200a20 2020206d coefs.x); . m │ │ │ │ + 0x00d22180 61696e4f 75746c69 6e65436f 6c6f7220 ainOutlineColor │ │ │ │ + 0x00d22190 3d206d69 78286d61 696e4f75 746c696e = mix(mainOutlin │ │ │ │ + 0x00d221a0 65436f6c 6f722c20 755f6661 6b654f75 eColor, u_fakeOu │ │ │ │ + 0x00d221b0 746c696e 65436f6c 6f722c20 636f6566 tlineColor, coef │ │ │ │ + 0x00d221c0 732e7929 3b200a20 20202076 65633420 s.y); . vec4 │ │ │ │ + 0x00d221d0 636f6c6f 72203d20 6d697828 6d697828 color = mix(mix( │ │ │ │ + 0x00d221e0 6d61696e 436f6c6f 722c2076 65633428 mainColor, vec4( │ │ │ │ + 0x00d221f0 765f636f 6c6f722e 7267622c 20312e30 v_color.rgb, 1.0 │ │ │ │ + 0x00d22200 292c2076 5f636f6c 6f722e61 292c206d ), v_color.a), m │ │ │ │ + 0x00d22210 61696e43 6f6c6f72 2c207374 65702875 ainColor, step(u │ │ │ │ + 0x00d22220 5f726f75 74655061 72616d73 2e772c20 _routeParams.w, │ │ │ │ + 0x00d22230 302e3029 293b200a 20202020 636f6c6f 0.0)); . colo │ │ │ │ + 0x00d22240 72203d20 6d697828 636f6c6f 722c206d r = mix(color, m │ │ │ │ + 0x00d22250 61696e4f 75746c69 6e65436f 6c6f722c ainOutlineColor, │ │ │ │ + 0x00d22260 20737465 70286b4f 75746c69 6e655468 step(kOutlineTh │ │ │ │ + 0x00d22270 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ + 0x00d22280 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ + 0x00d22290 2020636f 6c6f7220 3d206d69 7828636f color = mix(co │ │ │ │ + 0x00d222a0 6c6f722c 206d6169 6e4f7574 6c696e65 lor, mainOutline │ │ │ │ + 0x00d222b0 436f6c6f 722c2073 6d6f6f74 68737465 Color, smoothste │ │ │ │ + 0x00d222c0 70286b4f 75746c69 6e655468 72657368 p(kOutlineThresh │ │ │ │ + 0x00d222d0 6f6c6432 2c206b4f 75746c69 6e655468 old2, kOutlineTh │ │ │ │ + 0x00d222e0 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ + 0x00d222f0 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ + 0x00d22300 2020636f 6c6f722e 61202a3d 2028312e color.a *= (1. │ │ │ │ + 0x00d22310 30202d20 736d6f6f 74687374 6570286b 0 - smoothstep(k │ │ │ │ + 0x00d22320 416e7469 616c6961 73696e67 54687265 AntialiasingThre │ │ │ │ + 0x00d22330 73686f6c 642c2031 2e302c20 61627328 shold, 1.0, abs( │ │ │ │ + 0x00d22340 765f6c65 6e677468 2e792929 293b200a v_length.y))); . │ │ │ │ + 0x00d22350 20202020 636f6c6f 72203d20 76656334 color = vec4 │ │ │ │ + 0x00d22360 286d6978 28636f6c 6f722e72 67622c20 (mix(color.rgb, │ │ │ │ + 0x00d22370 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ + 0x00d22380 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ + 0x00d22390 20636f6c 6f722e61 293b200a 20202020 color.a); . │ │ │ │ + 0x00d223a0 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ + 0x00d223b0 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ 0x00d223c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ 0x00d223d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ 0x00d223e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ 0x00d223f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ 0x00d22400 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ 0x00d22410 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ 0x00d22420 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ @@ -53581,8203 +53581,8203 @@ │ │ │ │ 0x00d224a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ 0x00d224b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ 0x00d224c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ 0x00d224d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ 0x00d224e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ 0x00d224f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ 0x00d22500 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d22510 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00d22520 696e2076 65633220 765f7465 78436f6f in vec2 v_texCoo │ │ │ │ - 0x00d22530 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d22540 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d22550 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d22560 7472616e 73666f72 6d3b200a 2020756e transform; . un │ │ │ │ - 0x00d22570 69666f72 6d206d61 74342075 5f6e6f72 iform mat4 u_nor │ │ │ │ - 0x00d22580 6d616c54 72616e73 666f726d 3b200a20 malTransform; . │ │ │ │ - 0x00d22590 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00d225a0 636f6c6f 723b200a 2020756e 69666f72 color; . unifor │ │ │ │ - 0x00d225b0 6d207665 63322075 5f746578 436f6f72 m vec2 u_texCoor │ │ │ │ - 0x00d225c0 64466c69 7070696e 673b200a 2020756e dFlipping; . un │ │ │ │ - 0x00d225d0 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00d225e0 755f636f 6c6f7254 65783b20 0a202063 u_colorTex; . c │ │ │ │ - 0x00d225f0 6f6e7374 20766563 33206c69 67687444 onst vec3 lightD │ │ │ │ - 0x00d22600 6972203d 20766563 3328302e 3331362c ir = vec3(0.316, │ │ │ │ - 0x00d22610 20302e30 2c20302e 39343829 3b200a20 0.0, 0.948); . │ │ │ │ - 0x00d22620 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d22630 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d22640 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ - 0x00d22650 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d22660 2020666c 6f617420 70686f6e 67446966 float phongDif │ │ │ │ - 0x00d22670 66757365 203d206d 61782830 2e302c20 fuse = max(0.0, │ │ │ │ - 0x00d22680 2d646f74 286c6967 68744469 722c2076 -dot(lightDir, v │ │ │ │ - 0x00d22690 5f6e6f72 6d616c29 293b200a 20202020 _normal)); . │ │ │ │ - 0x00d226a0 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ - 0x00d226b0 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ - 0x00d226c0 20765f74 6578436f 6f726473 29202a20 v_texCoords) * │ │ │ │ - 0x00d226d0 755f636f 6c6f723b 200a2020 2020765f u_color; . v_ │ │ │ │ - 0x00d226e0 46726167 436f6c6f 72203d20 76656334 FragColor = vec4 │ │ │ │ - 0x00d226f0 28287068 6f6e6744 69666675 7365202a ((phongDiffuse * │ │ │ │ - 0x00d22700 20302e35 202b2030 2e352920 2a20636f 0.5 + 0.5) * co │ │ │ │ - 0x00d22710 6c6f722e 7267622c 20636f6c 6f722e61 lor.rgb, color.a │ │ │ │ - 0x00d22720 293b200a 20207d20 0a000000 00000000 ); . } ........ │ │ │ │ - 0x00d22730 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d22740 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d22750 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d22760 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d22770 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d22780 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d22790 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d227a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d227b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d227c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d227d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d227e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d227f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d22800 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d22810 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d22820 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d22830 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d22840 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d22850 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d22860 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d22870 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d22880 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d22890 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00d228a0 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00d228b0 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00d228c0 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ - 0x00d228d0 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00d228e0 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ - 0x00d228f0 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00d22900 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ - 0x00d22910 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ - 0x00d22920 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ - 0x00d22930 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00d22940 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d22950 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ - 0x00d22960 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ - 0x00d22970 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ - 0x00d22980 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d22990 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d229a0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d229b0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d229c0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d229d0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d229e0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d229f0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d22a00 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d22a10 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d22a20 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d22a30 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d22a40 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d22a50 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d22a60 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d22a70 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d22a80 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d22a90 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d22aa0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d22ab0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d22ac0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d22ad0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d22ae0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d22af0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d22b00 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d22b10 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d22b20 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d22b30 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d22b40 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d22b50 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d22b60 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d22b70 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d22b80 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d22b90 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d22ba0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d22bb0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d22bc0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d22bd0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d22be0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d22bf0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d22c00 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d22c10 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d22c20 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d22c30 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d22c40 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d22c50 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d22c60 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d22c70 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d22c80 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d22c90 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d22ca0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d22cb0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d22cc0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d22cd0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d22ce0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d22cf0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d22d00 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d22d10 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d22d20 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d22d30 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d22d40 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d22d50 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d22d60 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d22d70 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d22d80 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d22d90 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d22da0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d22db0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d22dc0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d22dd0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d22de0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d22df0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d22e00 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d22e10 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d22e20 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d22e30 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d22e40 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d22e50 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d22e60 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d22e70 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d22e80 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d22e90 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d22ea0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d22eb0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d22ec0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d22ed0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d22ee0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d22ef0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d22f00 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d22f10 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00d22f20 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ - 0x00d22f30 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ - 0x00d22f40 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ - 0x00d22f50 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ - 0x00d22f60 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ - 0x00d22f70 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ - 0x00d22f80 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ - 0x00d22f90 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ - 0x00d22fa0 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ - 0x00d22fb0 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ - 0x00d22fc0 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ - 0x00d22fd0 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ - 0x00d22fe0 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ - 0x00d22ff0 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ - 0x00d23000 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ - 0x00d23010 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ - 0x00d23020 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ - 0x00d23030 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ - 0x00d23040 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ - 0x00d23050 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ - 0x00d23060 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ - 0x00d23070 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ - 0x00d23080 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d23090 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d230a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d230b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d230c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d230d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d230e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d230f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d23100 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d23110 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d23120 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d23130 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d23140 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d23150 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d23160 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d23170 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d23180 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d23190 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d231a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d231b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d231c0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d231d0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d231e0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d231f0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d23200 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d23210 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d23220 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d23230 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d23240 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d23250 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00d23260 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00d23270 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d23280 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00d23290 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00d232a0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00d232b0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d232c0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d232d0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00d232e0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00d232f0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00d23300 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d23310 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d23320 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00d23330 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00d23340 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00d23350 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d23360 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00d23370 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ - 0x00d23380 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ - 0x00d23390 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ - 0x00d233a0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d233b0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d233c0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00d233d0 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ - 0x00d233e0 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ - 0x00d233f0 50207665 63342066 696e616c 436f6c6f P vec4 finalColo │ │ │ │ - 0x00d23400 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ - 0x00d23410 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ - 0x00d23420 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ - 0x00d23430 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ - 0x00d23440 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ - 0x00d23450 78436f6f 72647329 3b200a20 2023656e xCoords); . #en │ │ │ │ - 0x00d23460 64696620 0a202020 20666c6f 61742073 dif . float s │ │ │ │ - 0x00d23470 6d616c6c 52616469 7573203d 20765f72 mallRadius = v_r │ │ │ │ - 0x00d23480 61646975 732e7a20 2d206161 50697865 adius.z - aaPixe │ │ │ │ - 0x00d23490 6c73436f 756e743b 200a2020 2020666c lsCount; . fl │ │ │ │ - 0x00d234a0 6f617420 73746570 56616c75 65203d20 oat stepValue = │ │ │ │ - 0x00d234b0 736d6f6f 74687374 65702873 6d616c6c smoothstep(small │ │ │ │ - 0x00d234c0 52616469 7573202a 20736d61 6c6c5261 Radius * smallRa │ │ │ │ - 0x00d234d0 64697573 2c20765f 72616469 75732e7a dius, v_radius.z │ │ │ │ - 0x00d234e0 202a2076 5f726164 6975732e 7a2c200a * v_radius.z, . │ │ │ │ - 0x00d234f0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d23500 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d23510 20765f72 61646975 732e7820 2a20765f v_radius.x * v_ │ │ │ │ - 0x00d23520 72616469 75732e78 202b2076 5f726164 radius.x + v_rad │ │ │ │ - 0x00d23530 6975732e 79202a20 765f7261 64697573 ius.y * v_radius │ │ │ │ - 0x00d23540 2e79293b 200a2020 20206669 6e616c43 .y); . finalC │ │ │ │ - 0x00d23550 6f6c6f72 2e61203d 2066696e 616c436f olor.a = finalCo │ │ │ │ - 0x00d23560 6c6f722e 61202a20 755f6f70 61636974 lor.a * u_opacit │ │ │ │ - 0x00d23570 79202a20 28312e30 202d2073 74657056 y * (1.0 - stepV │ │ │ │ - 0x00d23580 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ - 0x00d23590 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d235a0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d235b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d235c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d235d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d235e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d235f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d23600 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d23610 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d23620 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d23630 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d23640 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d23650 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d23660 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d23670 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d23680 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d23690 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d236a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d236b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d236c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d236d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d236e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d236f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d23700 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d23710 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d23720 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d23730 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d23740 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d23750 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d23760 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ - 0x00d23770 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ - 0x00d23780 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ - 0x00d23790 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00d237a0 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00d237b0 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ - 0x00d237c0 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ - 0x00d237d0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d237e0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d237f0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d23800 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d23810 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d23820 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d23830 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d23840 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d23850 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d23860 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d23870 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d23880 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d23890 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d238a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d238b0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d238c0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d238d0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00d238e0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00d238f0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00d23900 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d23910 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d23920 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d23930 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d23940 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d23950 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d23960 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d23970 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d23980 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d23990 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d239a0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d239b0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d239c0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d239d0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d239e0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d239f0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d23a00 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d23a10 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d23a20 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d23a30 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d23a40 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d23a50 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d23a60 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d23a70 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d23a80 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d23a90 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d23aa0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d23ab0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d23ac0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d23ad0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d23ae0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d23af0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d23b00 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d23b10 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d23b20 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d23b30 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d23b40 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d23b50 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d23b60 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d23b70 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d23b80 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d23b90 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d23ba0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d23bb0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d23bc0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d23bd0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d23be0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d23bf0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d23c00 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d23c10 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d23c20 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d23c30 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d23c40 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d23c50 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d23c60 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d23c70 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d23c80 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d23c90 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d23ca0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d23cb0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d23cc0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d23cd0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d23ce0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d23cf0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d23d00 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d23d10 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d23d20 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d23d30 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d23d40 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d23d50 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d23d60 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d23d70 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d23d80 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d23d90 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d23da0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d23db0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d23dc0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d23dd0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d23de0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d23df0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d23e00 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d23e10 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d23e20 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d23e30 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d23e40 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d23e50 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d23e60 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d23e70 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d23e80 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d23e90 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d23ea0 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00d23eb0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00d23ec0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00d23ed0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00d23ee0 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00d23ef0 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ - 0x00d23f00 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d23f10 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d23f20 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ - 0x00d23f30 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ - 0x00d23f40 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00d23f50 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d23f60 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00d23f70 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00d23f80 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00d23f90 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00d23fa0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00d23fb0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00d23fc0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d23fd0 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ - 0x00d23fe0 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ - 0x00d23ff0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00d24000 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d24010 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d24020 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d24030 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d24040 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d24050 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d24060 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d24070 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d24080 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d24090 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d240a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d240b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d240c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d240d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d240e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d240f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d24100 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d24110 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d24120 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d24130 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d24140 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d24150 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00d24160 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d24170 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d24180 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d24190 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d241a0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d241b0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d241c0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d241d0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d241e0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d241f0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d24200 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d24210 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d24220 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d24230 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d24240 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d24250 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d24260 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d24270 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d24280 733b200a 2020636f 6e737420 666c6f61 s; . const floa │ │ │ │ - 0x00d24290 74206b41 6e746961 6c696173 696e6753 t kAntialiasingS │ │ │ │ - 0x00d242a0 63616c61 72203d20 302e393b 200a2020 calar = 0.9; . │ │ │ │ - 0x00d242b0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d242c0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d242d0 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ - 0x00d242e0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d242f0 20666c6f 61742064 203d2064 6f742876 float d = dot(v │ │ │ │ - 0x00d24300 5f726164 6975732e 78792c20 765f7261 _radius.xy, v_ra │ │ │ │ - 0x00d24310 64697573 2e787929 3b200a20 20202076 dius.xy); . v │ │ │ │ - 0x00d24320 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ - 0x00d24330 20765f63 6f6c6f72 3b200a20 20202066 v_color; . f │ │ │ │ - 0x00d24340 6c6f6174 20616152 61646975 73203d20 loat aaRadius = │ │ │ │ - 0x00d24350 765f7261 64697573 2e7a202a 206b416e v_radius.z * kAn │ │ │ │ - 0x00d24360 7469616c 69617369 6e675363 616c6172 tialiasingScalar │ │ │ │ - 0x00d24370 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ - 0x00d24380 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ - 0x00d24390 74657028 61615261 64697573 202a2061 tep(aaRadius * a │ │ │ │ - 0x00d243a0 61526164 6975732c 20765f72 61646975 aRadius, v_radiu │ │ │ │ - 0x00d243b0 732e7a20 2a20765f 72616469 75732e7a s.z * v_radius.z │ │ │ │ - 0x00d243c0 2c206429 3b200a20 20202066 696e616c , d); . final │ │ │ │ - 0x00d243d0 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ - 0x00d243e0 6f6c6f72 2e61202a 20755f6f 70616369 olor.a * u_opaci │ │ │ │ - 0x00d243f0 7479202a 2028312e 30202d20 73746570 ty * (1.0 - step │ │ │ │ - 0x00d24400 56616c75 65293b20 0a202020 20765f46 Value); . v_F │ │ │ │ - 0x00d24410 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ - 0x00d24420 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ - 0x00d24430 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d24440 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d24450 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d24460 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d24470 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d24480 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d24490 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d244a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d244b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d244c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d244d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d244e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d244f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d24500 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d24510 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d24520 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d24530 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d24540 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d24550 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d24560 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d24570 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d24580 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d24590 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ - 0x00d245a0 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ - 0x00d245b0 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ - 0x00d245c0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d245d0 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00d245e0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00d245f0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00d24600 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d24610 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d24620 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d24630 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d24640 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d24650 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d24660 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ - 0x00d24670 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d24680 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00d24690 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d246a0 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ - 0x00d246b0 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ - 0x00d246c0 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ - 0x00d246d0 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ - 0x00d246e0 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ - 0x00d246f0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d24700 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d24710 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00d24720 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d24730 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d24740 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d24750 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d24760 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00d24770 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d24780 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00d24790 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00d247a0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d247b0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d247c0 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00d247d0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d247e0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d247f0 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00d24800 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00d24810 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d24820 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00d24830 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00d24840 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d24850 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00d24860 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00d24870 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d24880 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d24890 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00d248a0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d248b0 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00d248c0 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00d248d0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d248e0 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00d248f0 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00d24900 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00d24910 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00d24920 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d24930 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d24940 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d24950 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00d24960 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00d24970 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00d24980 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00d24990 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d249a0 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00d249b0 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00d249c0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d249d0 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00d249e0 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00d249f0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d24a00 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00d24a10 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00d24a20 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00d24a30 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d24a40 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00d24a50 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00d24a60 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00d24a70 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00d24a80 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00d24a90 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00d24aa0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d24ab0 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00d24ac0 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00d24ad0 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00d24ae0 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00d24af0 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00d24b00 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d24b10 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00d24b20 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00d24b30 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00d24b40 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00d24b50 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00d24b60 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00d24b70 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00d24b80 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00d24b90 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00d24ba0 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00d24bb0 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00d24bc0 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00d24bd0 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00d24be0 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00d24bf0 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00d24c00 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00d24c10 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d24c20 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00d24c30 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00d24c40 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00d24c50 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00d24c60 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d24c70 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00d24c80 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d24c90 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ - 0x00d24ca0 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ - 0x00d24cb0 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ - 0x00d24cc0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00d24cd0 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ - 0x00d24ce0 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ - 0x00d24cf0 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ - 0x00d24d00 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ - 0x00d24d10 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ - 0x00d24d20 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ - 0x00d24d30 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00d24d40 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ - 0x00d24d50 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ - 0x00d24d60 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00d24d70 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00d24d80 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ - 0x00d24d90 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ - 0x00d24da0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00d24db0 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00d24dc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d24dd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d24de0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d24df0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d24e00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d24e10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d24e20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d24e30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d24e40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d24e50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d24e60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d24e70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d24e80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d24e90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d24ea0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d24eb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d24ec0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d24ed0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d24ee0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d24ef0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d24f00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d24f10 63342076 5f6e6f72 6d616c3b 200a2020 c4 v_normal; . │ │ │ │ - 0x00d24f20 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00d24f30 46200a20 20696e20 4c4f575f 50207665 F . in LOW_P ve │ │ │ │ - 0x00d24f40 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00d24f50 656c7365 200a2020 696e2076 65633220 else . in vec2 │ │ │ │ - 0x00d24f60 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d24f70 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ - 0x00d24f80 706c6572 32442075 5f636f6c 6f725465 pler2D u_colorTe │ │ │ │ - 0x00d24f90 783b200a 20202365 6e646966 200a2020 x; . #endif . │ │ │ │ - 0x00d24fa0 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ - 0x00d24fb0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d24fc0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00d24fd0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00d24fe0 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00d24ff0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d25000 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d25010 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00d25020 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00d25030 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00d25040 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d25050 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d25060 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00d25070 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00d25080 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00d25090 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d250a0 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00d250b0 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ - 0x00d250c0 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ - 0x00d250d0 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ - 0x00d250e0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d250f0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d25100 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00d25110 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ - 0x00d25120 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ - 0x00d25130 50207665 63342063 6f6c6f72 203d2076 P vec4 color = v │ │ │ │ - 0x00d25140 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ - 0x00d25150 200a2020 20204c4f 575f5020 76656334 . LOW_P vec4 │ │ │ │ - 0x00d25160 20636f6c 6f72203d 20746578 74757265 color = texture │ │ │ │ - 0x00d25170 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ - 0x00d25180 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ - 0x00d25190 0a202023 656e6469 66200a20 20202066 . #endif . f │ │ │ │ - 0x00d251a0 6c6f6174 20723120 3d202876 5f6e6f72 loat r1 = (v_nor │ │ │ │ - 0x00d251b0 6d616c2e 7a202d20 61615069 78656c73 mal.z - aaPixels │ │ │ │ - 0x00d251c0 436f756e 7429202a 2028765f 6e6f726d Count) * (v_norm │ │ │ │ - 0x00d251d0 616c2e7a 202d2061 61506978 656c7343 al.z - aaPixelsC │ │ │ │ - 0x00d251e0 6f756e74 293b200a 20202020 666c6f61 ount); . floa │ │ │ │ - 0x00d251f0 74207232 203d2076 5f6e6f72 6d616c2e t r2 = v_normal. │ │ │ │ - 0x00d25200 78202a20 765f6e6f 726d616c 2e78202b x * v_normal.x + │ │ │ │ - 0x00d25210 20765f6e 6f726d61 6c2e7920 2a20765f v_normal.y * v_ │ │ │ │ - 0x00d25220 6e6f726d 616c2e79 3b200a20 20202066 normal.y; . f │ │ │ │ - 0x00d25230 6c6f6174 20723320 3d20765f 6e6f726d loat r3 = v_norm │ │ │ │ - 0x00d25240 616c2e7a 202a2076 5f6e6f72 6d616c2e al.z * v_normal. │ │ │ │ - 0x00d25250 7a3b200a 20202020 666c6f61 7420616c z; . float al │ │ │ │ - 0x00d25260 70686120 3d206d69 78287374 65702872 pha = mix(step(r │ │ │ │ - 0x00d25270 332c2072 32292c20 736d6f6f 74687374 3, r2), smoothst │ │ │ │ - 0x00d25280 65702872 312c2072 332c2072 32292c20 ep(r1, r3, r2), │ │ │ │ - 0x00d25290 765f6e6f 726d616c 2e77293b 200a2020 v_normal.w); . │ │ │ │ - 0x00d252a0 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ - 0x00d252b0 616c436f 6c6f7220 3d20636f 6c6f723b alColor = color; │ │ │ │ - 0x00d252c0 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ - 0x00d252d0 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ - 0x00d252e0 61202a20 755f6f70 61636974 79202a20 a * u_opacity * │ │ │ │ - 0x00d252f0 28312e30 202d2061 6c706861 293b200a (1.0 - alpha); . │ │ │ │ - 0x00d25300 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ - 0x00d25310 6f722e61 203d3d20 302e3029 200a2020 or.a == 0.0) . │ │ │ │ - 0x00d25320 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ - 0x00d25330 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d25340 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d25350 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d25360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d25370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d25380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d25390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d253a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d253b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d253c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d253d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d253e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d253f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d25400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d25410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d25420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d25430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d25440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d25450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d25460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d25470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d25480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d25490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d254a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d254b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d254c0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d254d0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d254e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d254f0 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00d25500 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00d25510 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00d25520 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00d25530 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d25540 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d25550 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d25560 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d25570 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d25580 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d25590 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d255a0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d255b0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d255c0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d255d0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d255e0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d255f0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d25600 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d25610 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d25620 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d25630 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d25640 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d25650 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d25660 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d25670 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00d25680 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00d25690 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00d256a0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d256b0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d256c0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d256d0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d256e0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d256f0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d25700 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d25710 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d25720 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d25730 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d25740 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d25750 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d25760 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d25770 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d25780 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d25790 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d257a0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d257b0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d257c0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d257d0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d257e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d257f0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d25800 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d25810 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d25820 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d25830 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d25840 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d25850 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d25860 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d25870 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d25880 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d25890 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d258a0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d258b0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d258c0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d258d0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d258e0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d258f0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d25900 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d25910 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d25920 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d25930 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d25940 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d25950 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d25960 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d25970 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d25980 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d25990 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d259a0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d259b0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d259c0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d259d0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d259e0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d259f0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d25a00 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d25a10 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d25a20 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d25a30 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d25a40 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d25a50 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d25a60 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d25a70 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d25a80 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d25a90 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d25aa0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d25ab0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d25ac0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d25ad0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d25ae0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d25af0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d25b00 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d25b10 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d25b20 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d25b30 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d25b40 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d25b50 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d25b60 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d25b70 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d25b80 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d25b90 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d25ba0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d25bb0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d25bc0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d25bd0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d25be0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d25bf0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d25c00 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d25c10 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d25c20 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d25c30 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d25c40 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00d25c50 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00d25c60 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00d25c70 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00d25c80 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00d25c90 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ - 0x00d25ca0 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ - 0x00d25cb0 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ - 0x00d25cc0 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00d25cd0 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ - 0x00d25ce0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00d25cf0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d25d00 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d25d10 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00d25d20 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00d25d30 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00d25d40 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ - 0x00d25d50 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ - 0x00d25d60 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ - 0x00d25d70 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ - 0x00d25d80 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ - 0x00d25d90 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ - 0x00d25da0 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ - 0x00d25db0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d25dc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d25dd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d25de0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d25df0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d25e00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d25e10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d25e20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d25e30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d25e40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d25e50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d25e60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d25e70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d25e80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d25e90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d25ea0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d25eb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d25ec0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d25ed0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d25ee0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d25ef0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d25f00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d25f10 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d25f20 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d25f30 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d25f40 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d25f50 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00d25f60 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00d25f70 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00d25f80 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00d25f90 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d25fa0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d25fb0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d25fc0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d25fd0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d25fe0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d25ff0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d26000 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d26010 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d26020 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d26030 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d26040 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d26050 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d26060 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d26070 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d26080 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d26090 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d260a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d260b0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d260c0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d260d0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00d260e0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00d260f0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00d26100 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d26110 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d26120 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d26130 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d26140 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d26150 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d26160 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d26170 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d26180 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d26190 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d261a0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d261b0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d261c0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d261d0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d261e0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d261f0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d26200 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d26210 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d26220 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d26230 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d26240 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d26250 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d26260 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d26270 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d26280 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d26290 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d262a0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d262b0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d262c0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d262d0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d262e0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d262f0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d26300 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d26310 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d26320 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d26330 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d26340 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d26350 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d26360 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d26370 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d26380 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d26390 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d263a0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d263b0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d263c0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d263d0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d263e0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d263f0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d26400 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d26410 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d26420 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d26430 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d26440 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d26450 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d26460 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d26470 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d26480 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d26490 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d264a0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d264b0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d264c0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d264d0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d264e0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d264f0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d26500 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d26510 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d26520 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d26530 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d26540 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d26550 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d26560 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d26570 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d26580 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d26590 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d265a0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d265b0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d265c0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d265d0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d265e0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d265f0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d26600 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d26610 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d26620 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d26630 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d26640 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d26650 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d26660 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d26670 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d26680 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d26690 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d266a0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00d266b0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00d266c0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00d266d0 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00d266e0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00d266f0 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ - 0x00d26700 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d26710 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ - 0x00d26720 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d26730 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d26740 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ - 0x00d26750 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ - 0x00d26760 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ - 0x00d26770 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00d26780 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ - 0x00d26790 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ - 0x00d267a0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d267b0 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ - 0x00d267c0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d267d0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d267e0 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ - 0x00d267f0 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ - 0x00d26800 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ - 0x00d26810 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ - 0x00d26820 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ - 0x00d26830 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ - 0x00d26840 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d26850 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d26860 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d26870 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d26880 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d26890 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d268a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d268b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d268c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d268d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d268e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d268f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d26900 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d26910 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d26920 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d26930 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d26940 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d26950 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d26960 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d26970 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d26980 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d26990 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d269a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d269b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d269c0 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ - 0x00d269d0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d269e0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00d269f0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ - 0x00d26a00 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d26a10 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d26a20 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d26a30 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d26a40 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d26a50 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d26a60 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d26a70 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d26a80 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d26a90 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d26aa0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d26ab0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d26ac0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d26ad0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d26ae0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d26af0 200a2020 756e6966 6f726d20 73616d70 . uniform samp │ │ │ │ - 0x00d26b00 6c657232 4420755f 636f6c6f 72546578 ler2D u_colorTex │ │ │ │ - 0x00d26b10 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ - 0x00d26b20 706c6572 32442075 5f6d6173 6b546578 pler2D u_maskTex │ │ │ │ - 0x00d26b30 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d26b40 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d26b50 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d26b60 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d26b70 200a2020 20207665 63342063 6f6c6f72 . vec4 color │ │ │ │ - 0x00d26b80 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ - 0x00d26b90 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ - 0x00d26ba0 78436f6f 7264293b 200a2020 2020666c xCoord); . fl │ │ │ │ - 0x00d26bb0 6f617420 6d61736b 203d2074 65787475 oat mask = textu │ │ │ │ - 0x00d26bc0 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ - 0x00d26bd0 6d61736b 54657843 6f6f7264 292e723b maskTexCoord).r; │ │ │ │ - 0x00d26be0 200a2020 2020636f 6c6f722e 61203d20 . color.a = │ │ │ │ - 0x00d26bf0 636f6c6f 722e6120 2a206d61 736b202a color.a * mask * │ │ │ │ - 0x00d26c00 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ - 0x00d26c10 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ - 0x00d26c20 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d26c30 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d26c40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d26c50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d26c60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d26c70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d26c80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d26c90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d26ca0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d26cb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d26cc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d26cd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d26ce0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d26cf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d26d00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d26d10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d26d20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d26d30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d26d40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d26d50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d26d60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d26d70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d26d80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d26d90 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d26da0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d26db0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d26dc0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d26dd0 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ - 0x00d26de0 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ - 0x00d26df0 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00d26e00 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ - 0x00d26e10 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ - 0x00d26e20 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ - 0x00d26e30 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d26e40 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d26e50 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d26e60 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d26e70 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d26e80 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d26e90 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ - 0x00d26ea0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d26eb0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00d26ec0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d26ed0 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ - 0x00d26ee0 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ - 0x00d26ef0 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ - 0x00d26f00 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ - 0x00d26f10 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ - 0x00d26f20 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d26f30 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d26f40 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ - 0x00d26f50 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d26f60 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d26f70 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d26f80 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d26f90 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ - 0x00d26fa0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d26fb0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ - 0x00d26fc0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ - 0x00d26fd0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d26fe0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d26ff0 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ - 0x00d27000 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d27010 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d27020 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ - 0x00d27030 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ - 0x00d27040 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d27050 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ - 0x00d27060 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ - 0x00d27070 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ - 0x00d27080 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ - 0x00d27090 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ - 0x00d270a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d270b0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ - 0x00d270c0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ - 0x00d270d0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d270e0 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ - 0x00d270f0 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ - 0x00d27100 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d27110 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ - 0x00d27120 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ - 0x00d27130 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ - 0x00d27140 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ - 0x00d27150 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d27160 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d27170 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d27180 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ - 0x00d27190 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ - 0x00d271a0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ - 0x00d271b0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ - 0x00d271c0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d271d0 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ - 0x00d271e0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d271f0 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ - 0x00d27200 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ - 0x00d27210 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ - 0x00d27220 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ - 0x00d27230 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ - 0x00d27240 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ - 0x00d27250 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ - 0x00d27260 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ - 0x00d27270 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ - 0x00d27280 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d27290 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ - 0x00d272a0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ - 0x00d272b0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ - 0x00d272c0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00d272d0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d272e0 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ - 0x00d272f0 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ - 0x00d27300 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ - 0x00d27310 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ - 0x00d27320 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ - 0x00d27330 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d27340 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ - 0x00d27350 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ - 0x00d27360 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00d27370 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ - 0x00d27380 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ - 0x00d27390 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ - 0x00d273a0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ - 0x00d273b0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ - 0x00d273c0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d273d0 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ - 0x00d273e0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00d273f0 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ - 0x00d27400 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ - 0x00d27410 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ - 0x00d27420 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ - 0x00d27430 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ - 0x00d27440 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d27450 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ - 0x00d27460 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ - 0x00d27470 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ - 0x00d27480 7365200a 20202020 20207265 7475726e se . return │ │ │ │ - 0x00d27490 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d274a0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00d274b0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00d274c0 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ - 0x00d274d0 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ - 0x00d274e0 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ - 0x00d274f0 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ - 0x00d27500 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00d27510 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d27520 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00d27530 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00d27540 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00d27550 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ - 0x00d27560 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ - 0x00d27570 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ - 0x00d27580 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d27590 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d275a0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00d275b0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d275c0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00d275d0 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ - 0x00d275e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d275f0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d27600 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00d27610 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ - 0x00d27620 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ - 0x00d27630 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ - 0x00d27640 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ - 0x00d27650 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ - 0x00d27660 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ - 0x00d27670 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ - 0x00d27680 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ - 0x00d27690 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ - 0x00d276a0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00d276b0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00d276c0 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ - 0x00d276d0 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ - 0x00d276e0 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ - 0x00d276f0 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ - 0x00d27700 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ - 0x00d27710 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ - 0x00d27720 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00d27730 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00d27740 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00d27750 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00d27760 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d27770 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d27780 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d27790 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d277a0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d277b0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d277c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d277d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d277e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d277f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d27800 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d27810 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d27820 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d27830 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d27840 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d27850 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d27860 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d27870 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d27880 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d27890 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d278a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d278b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d278c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d278d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d278e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d278f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d27900 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ - 0x00d27910 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00d27920 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d27930 20755f63 6f6c6f72 3b200a20 20636f6e u_color; . con │ │ │ │ - 0x00d27940 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d27950 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d27960 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d27970 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ - 0x00d27980 46726167 436f6c6f 72203d20 755f636f FragColor = u_co │ │ │ │ - 0x00d27990 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00d279a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d279b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d279c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d279d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d279e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d279f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d27a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d27a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d27a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d27a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d27a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d27a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d27a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d27a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d27a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d27a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d27aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d27ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d27ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d27ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d27ae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d27af0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d27b00 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00d27b10 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00d27b20 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00d27b30 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00d27b40 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d27b50 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d27b60 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d27b70 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00d27b80 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d27b90 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d27ba0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00d27bb0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d27bc0 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00d27bd0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00d27be0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00d27bf0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00d27c00 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00d27c10 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00d27c20 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d27c30 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00d27c40 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00d27c50 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00d27c60 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00d27c70 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00d27c80 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00d27c90 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00d27ca0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00d27cb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d27cc0 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00d27cd0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00d27ce0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d27cf0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00d27d00 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00d27d10 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00d27d20 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00d27d30 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d27d40 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d27d50 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d27d60 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00d27d70 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00d27d80 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00d27d90 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00d27da0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d27db0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d27dc0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d27dd0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00d27de0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00d27df0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00d27e00 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00d27e10 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00d27e20 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00d27e30 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d27e40 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00d27e50 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00d27e60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d27e70 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00d27e80 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00d27e90 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00d27ea0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00d27eb0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d27ec0 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00d27ed0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00d27ee0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00d27ef0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00d27f00 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00d27f10 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d27f20 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00d27f30 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00d27f40 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00d27f50 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00d27f60 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00d27f70 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00d27f80 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00d27f90 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00d27fa0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00d27fb0 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00d27fc0 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00d27fd0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00d27fe0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00d27ff0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00d28000 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00d28010 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00d28020 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d28030 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00d28040 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00d28050 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00d28060 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00d28070 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d28080 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00d28090 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d280a0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d280b0 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ - 0x00d280c0 20302c20 31293b20 0a202023 69666465 0, 1); . #ifde │ │ │ │ - 0x00d280d0 66205655 4c4b414e 200a2020 2020676c f VULKAN . gl │ │ │ │ - 0x00d280e0 5f506f73 6974696f 6e2e7920 3d202d67 _Position.y = -g │ │ │ │ - 0x00d280f0 6c5f506f 73697469 6f6e2e79 3b200a20 l_Position.y; . │ │ │ │ - 0x00d28100 20202067 6c5f506f 73697469 6f6e2e7a gl_Position.z │ │ │ │ - 0x00d28110 203d2028 676c5f50 6f736974 696f6e2e = (gl_Position. │ │ │ │ - 0x00d28120 7a20202b 20676c5f 506f7369 74696f6e z + gl_Position │ │ │ │ - 0x00d28130 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ - 0x00d28140 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ - 0x00d28150 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d28160 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d28170 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d28180 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d28190 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d281a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d281b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d281c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d281d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d281e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d281f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d28200 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d28210 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d28220 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d28230 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d28240 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d28250 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d28260 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d28270 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d28280 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d28290 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d282a0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d282b0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d282c0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d282d0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d282e0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d282f0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d28300 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d28310 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d28320 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d28330 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00d28340 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00d28350 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00d28360 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d28370 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d28380 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d28390 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d283a0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d283b0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d283c0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d283d0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d283e0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00d283f0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00d28400 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00d28410 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d28420 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00d28430 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00d28440 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00d28450 50617373 3b200a20 20756e69 666f726d Pass; . uniform │ │ │ │ - 0x00d28460 2073616d 706c6572 32442075 5f6d6173 sampler2D u_mas │ │ │ │ - 0x00d28470 6b546578 3b200a20 20636f6e 73742066 kTex; . const f │ │ │ │ - 0x00d28480 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00d28490 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00d284a0 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00d284b0 0a20207b 200a2020 23696664 65662045 . { . #ifdef E │ │ │ │ - 0x00d284c0 4e41424c 455f5654 46200a20 2020204c NABLE_VTF . L │ │ │ │ - 0x00d284d0 4f575f50 20766563 3420636f 6c6f7220 OW_P vec4 color │ │ │ │ - 0x00d284e0 3d20765f 636f6c6f 723b200a 20202365 = v_color; . #e │ │ │ │ - 0x00d284f0 6c736520 0a202020 204c4f57 5f502076 lse . LOW_P v │ │ │ │ - 0x00d28500 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ - 0x00d28510 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d28520 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d28530 293b200a 20202365 6e646966 200a2020 ); . #endif . │ │ │ │ - 0x00d28540 2020636f 6c6f7220 2a3d2074 65787475 color *= textu │ │ │ │ - 0x00d28550 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ - 0x00d28560 6d61736b 54657843 6f6f7264 73293b20 maskTexCoords); │ │ │ │ - 0x00d28570 0a202020 20636f6c 6f722e61 202a3d20 . color.a *= │ │ │ │ - 0x00d28580 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ - 0x00d28590 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ - 0x00d285a0 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00d285b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d285c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d285d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d285e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d285f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d28600 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d28610 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d28620 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d28630 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d28640 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d28650 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d28660 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d28670 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d28680 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d28690 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d286a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d286b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d286c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d286d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d286e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d286f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d28700 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d28710 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d28720 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d28730 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ - 0x00d28740 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ - 0x00d28750 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ - 0x00d28760 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d28770 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ - 0x00d28780 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ - 0x00d28790 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d287a0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d287b0 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ - 0x00d287c0 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ - 0x00d287d0 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00d287e0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00d287f0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00d28800 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00d28810 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d28820 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d28830 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00d28840 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00d28850 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00d28860 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d28870 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d28880 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00d28890 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00d288a0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00d288b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d288c0 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00d288d0 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ - 0x00d288e0 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ - 0x00d288f0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ - 0x00d28900 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ - 0x00d28910 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00d28920 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00d28930 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00d28940 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00d28950 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d28960 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d28970 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d28980 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00d28990 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d289a0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d289b0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00d289c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d289d0 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00d289e0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00d289f0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00d28a00 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00d28a10 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00d28a20 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00d28a30 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d28a40 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00d28a50 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00d28a60 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00d28a70 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00d28a80 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00d28a90 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00d28aa0 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00d28ab0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00d28ac0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d28ad0 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00d28ae0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00d28af0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d28b00 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00d28b10 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00d28b20 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00d28b30 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00d28b40 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d28b50 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d28b60 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d28b70 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00d28b80 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00d28b90 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00d28ba0 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00d28bb0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d28bc0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d28bd0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d28be0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00d28bf0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00d28c00 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00d28c10 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00d28c20 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00d28c30 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00d28c40 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d28c50 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00d28c60 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00d28c70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d28c80 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00d28c90 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00d28ca0 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00d28cb0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00d28cc0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d28cd0 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00d28ce0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00d28cf0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00d28d00 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00d28d10 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00d28d20 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d28d30 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00d28d40 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00d28d50 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00d28d60 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00d28d70 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00d28d80 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00d28d90 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00d28da0 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00d28db0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00d28dc0 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00d28dd0 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00d28de0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00d28df0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00d28e00 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00d28e10 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00d28e20 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00d28e30 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d28e40 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00d28e50 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00d28e60 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00d28e70 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00d28e80 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d28e90 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00d28ea0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d28eb0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00d28ec0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00d28ed0 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ - 0x00d28ee0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d28ef0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d28f00 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ - 0x00d28f10 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ - 0x00d28f20 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00d28f30 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00d28f40 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00d28f50 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00d28f60 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00d28f70 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ - 0x00d28f80 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ - 0x00d28f90 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00d28fa0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d28fb0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d28fc0 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ - 0x00d28fd0 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ - 0x00d28fe0 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00d28ff0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d29000 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d29010 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d29020 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d29030 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d29040 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d29050 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d29060 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d29070 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d29080 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d29090 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d290a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d290b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d290c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d290d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d290e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d290f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d29100 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d29110 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d29120 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d29130 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d29140 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d29150 63322076 5f746578 436f6f72 64733b20 c2 v_texCoords; │ │ │ │ - 0x00d29160 0a202069 6e207665 63342076 5f636f6c . in vec4 v_col │ │ │ │ - 0x00d29170 6f723b20 0a20206f 75742076 65633420 or; . out vec4 │ │ │ │ - 0x00d29180 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00d29190 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d291a0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d291b0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d291c0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d291d0 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ - 0x00d291e0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d291f0 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ - 0x00d29200 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d29210 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ - 0x00d29220 6f726473 293b200a 20202020 765f4672 ords); . v_Fr │ │ │ │ - 0x00d29230 6167436f 6c6f7220 3d20636f 6c6f7220 agColor = color │ │ │ │ - 0x00d29240 2a20765f 636f6c6f 723b200a 20207d20 * v_color; . } │ │ │ │ - 0x00d29250 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d29260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d29270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d29280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d29290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d292a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d292b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d292c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d292d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d292e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d292f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d29300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d29310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d29320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d29330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d29340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d29350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d29360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d29370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d29380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d29390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d293a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d293b0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d293c0 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00d293d0 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ - 0x00d293e0 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ - 0x00d293f0 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ - 0x00d29400 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00d29410 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ - 0x00d29420 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ - 0x00d29430 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ - 0x00d29440 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d29450 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d29460 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00d29470 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d29480 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d29490 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d294a0 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00d294b0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d294c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d294d0 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00d294e0 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00d294f0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00d29500 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d29510 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00d29520 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d29530 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d29540 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d29550 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00d29560 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d29570 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00d29580 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00d29590 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d295a0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d295b0 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00d295c0 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00d295d0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d295e0 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00d295f0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00d29600 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d29610 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00d29620 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00d29630 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00d29640 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00d29650 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00d29660 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00d29670 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00d29680 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00d29690 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00d296a0 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00d296b0 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00d296c0 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00d296d0 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00d296e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d296f0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00d29700 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00d29710 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d29720 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00d29730 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00d29740 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d29750 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00d29760 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00d29770 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00d29780 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d29790 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00d297a0 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00d297b0 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00d297c0 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00d297d0 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00d297e0 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00d297f0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00d29800 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00d29810 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00d29820 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00d29830 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00d29840 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d29850 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d29860 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00d29870 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00d29880 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00d29890 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00d298a0 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00d298b0 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00d298c0 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00d298d0 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00d298e0 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00d298f0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00d29900 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00d29910 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00d29920 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00d29930 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d29940 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00d29950 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00d29960 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d29970 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00d29980 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00d29990 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00d299a0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d299b0 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00d299c0 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00d299d0 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ - 0x00d299e0 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ - 0x00d299f0 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ - 0x00d29a00 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00d29a10 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d29a20 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ - 0x00d29a30 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ - 0x00d29a40 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00d29a50 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00d29a60 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00d29a70 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00d29a80 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d29a90 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00d29aa0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00d29ab0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00d29ac0 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ - 0x00d29ad0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d29ae0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d29af0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d29b00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d29b10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d29b20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d29b30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d29b40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d29b50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d29b60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d29b70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d29b80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d29b90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d29ba0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d29bb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d29bc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d29bd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d29be0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d29bf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d29c00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d29c10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d29c20 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d29c30 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d29c40 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d29c50 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d29c60 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d29c70 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d29c80 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d29c90 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d29ca0 23656e64 6966200a 20206f75 74207665 #endif . out ve │ │ │ │ - 0x00d29cb0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ - 0x00d29cc0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d29cd0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d29ce0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d29cf0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ - 0x00d29d00 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ - 0x00d29d10 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ - 0x00d29d20 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ - 0x00d29d30 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ - 0x00d29d40 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d29d50 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00d29d60 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ - 0x00d29d70 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ - 0x00d29d80 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ - 0x00d29d90 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ - 0x00d29da0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00d29db0 696e6550 6173733b 200a2020 636f6e73 inePass; . cons │ │ │ │ - 0x00d29dc0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d29dd0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d29de0 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ - 0x00d29df0 2829200a 20207b20 0a202023 69666465 () . { . #ifde │ │ │ │ - 0x00d29e00 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d29e10 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ - 0x00d29e20 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ - 0x00d29e30 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ - 0x00d29e40 50207665 63342063 6f6c6f72 203d2074 P vec4 color = t │ │ │ │ - 0x00d29e50 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00d29e60 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ - 0x00d29e70 7264293b 200a2020 23656e64 6966200a rd); . #endif . │ │ │ │ - 0x00d29e80 20202020 636f6c6f 722e6120 2a3d2075 color.a *= u │ │ │ │ - 0x00d29e90 5f6f7061 63697479 3b200a20 20202076 _opacity; . v │ │ │ │ - 0x00d29ea0 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ - 0x00d29eb0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d29ec0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d29ed0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d29ee0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d29ef0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d29f00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d29f10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d29f20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d29f30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d29f40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d29f50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d29f60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d29f70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d29f80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d29f90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d29fa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d29fb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d29fc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d29fd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d29fe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d29ff0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2a000 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2a010 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d2a020 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d2a030 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d2a040 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d2a050 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d2a060 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ - 0x00d2a070 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ - 0x00d2a080 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ - 0x00d2a090 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ - 0x00d2a0a0 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00d2a0b0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d2a0c0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d2a0d0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d2a0e0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ - 0x00d2a0f0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ - 0x00d2a100 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ - 0x00d2a110 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ - 0x00d2a120 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ - 0x00d2a130 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d2a140 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00d2a150 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ - 0x00d2a160 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ - 0x00d2a170 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ - 0x00d2a180 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ - 0x00d2a190 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00d2a1a0 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ - 0x00d2a1b0 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ - 0x00d2a1c0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00d2a1d0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00d2a1e0 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ - 0x00d2a1f0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d2a200 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d2a210 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00d2a220 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d2a230 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d2a240 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d2a250 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d2a260 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00d2a270 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d2a280 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00d2a290 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00d2a2a0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00d2a2b0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d2a2c0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00d2a2d0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d2a2e0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d2a2f0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d2a300 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00d2a310 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d2a320 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00d2a330 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00d2a340 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d2a350 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d2a360 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00d2a370 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00d2a380 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d2a390 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00d2a3a0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00d2a3b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d2a3c0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d2a3d0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d2a3e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d2a3f0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00d2a400 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d2a410 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d2a420 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d2a430 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d2a440 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00d2a450 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00d2a460 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00d2a470 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00d2a480 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00d2a490 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d2a4a0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00d2a4b0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00d2a4c0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d2a4d0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00d2a4e0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00d2a4f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d2a500 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00d2a510 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00d2a520 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00d2a530 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d2a540 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00d2a550 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00d2a560 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00d2a570 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00d2a580 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00d2a590 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00d2a5a0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00d2a5b0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00d2a5c0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00d2a5d0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00d2a5e0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00d2a5f0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00d2a600 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d2a610 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00d2a620 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00d2a630 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00d2a640 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00d2a650 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00d2a660 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00d2a670 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00d2a680 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00d2a690 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00d2a6a0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00d2a6b0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00d2a6c0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d2a6d0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00d2a6e0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d2a6f0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00d2a700 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00d2a710 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00d2a720 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00d2a730 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00d2a740 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00d2a750 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d2a760 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d2a770 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00d2a780 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d2a790 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ - 0x00d2a7a0 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ - 0x00d2a7b0 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ - 0x00d2a7c0 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ - 0x00d2a7d0 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ - 0x00d2a7e0 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ - 0x00d2a7f0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00d2a800 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00d2a810 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d2a820 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ - 0x00d2a830 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ - 0x00d2a840 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ - 0x00d2a850 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ - 0x00d2a860 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00d2a870 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ - 0x00d2a880 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ - 0x00d2a890 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ - 0x00d2a8a0 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ - 0x00d2a8b0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d2a8c0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d2a8d0 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ - 0x00d2a8e0 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ - 0x00d2a8f0 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ - 0x00d2a900 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d2a910 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ - 0x00d2a920 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00d2a930 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ - 0x00d2a940 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00d2a950 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d2a960 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00d2a970 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00d2a980 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00d2a990 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d2a9a0 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ - 0x00d2a9b0 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ - 0x00d2a9c0 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00d2a9d0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00d2a9e0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d2a9f0 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ - 0x00d2aa00 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00d2aa10 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d2aa20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2aa30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2aa40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2aa50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2aa60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2aa70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2aa80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2aa90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2aaa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2aab0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2aac0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2aad0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2aae0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2aaf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2ab00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2ab10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2ab20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2ab30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2ab40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2ab50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2ab60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2ab70 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d2ab80 7264733b 200a2020 696e2076 65633220 rds; . in vec2 │ │ │ │ - 0x00d2ab90 765f6d61 736b5465 78436f6f 7264733b v_maskTexCoords; │ │ │ │ - 0x00d2aba0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d2abb0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d2abc0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d2abd0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d2abe0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d2abf0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d2ac00 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d2ac10 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d2ac20 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d2ac30 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d2ac40 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d2ac50 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d2ac60 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d2ac70 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d2ac80 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d2ac90 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d2aca0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d2acb0 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ - 0x00d2acc0 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ - 0x00d2acd0 65783b20 0a202075 6e69666f 726d2073 ex; . uniform s │ │ │ │ - 0x00d2ace0 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ - 0x00d2acf0 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00d2ad00 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d2ad10 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d2ad20 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ - 0x00d2ad30 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ - 0x00d2ad40 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ - 0x00d2ad50 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d2ad60 636f6c6f 72546578 436f6f72 64732920 colorTexCoords) │ │ │ │ - 0x00d2ad70 2a207465 78747572 6528755f 6d61736b * texture(u_mask │ │ │ │ - 0x00d2ad80 5465782c 20765f6d 61736b54 6578436f Tex, v_maskTexCo │ │ │ │ - 0x00d2ad90 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ - 0x00d2ada0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ - 0x00d2adb0 61636974 793b200a 20202020 765f4672 acity; . v_Fr │ │ │ │ - 0x00d2adc0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d2add0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d2ade0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2adf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2ae00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2ae10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2ae20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2ae30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2ae40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2ae50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2ae60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2ae70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2ae80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2ae90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2aea0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2aeb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2aec0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2aed0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2aee0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2aef0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2af00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2af10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2af20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2af30 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d2af40 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d2af50 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d2af60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d2af70 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00d2af80 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00d2af90 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00d2afa0 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00d2afb0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d2afc0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d2afd0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d2afe0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d2aff0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d2b000 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d2b010 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d2b020 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d2b030 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d2b040 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d2b050 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d2b060 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d2b070 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d2b080 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d2b090 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d2b0a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d2b0b0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d2b0c0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d2b0d0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d2b0e0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d2b0f0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d2b100 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d2b110 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d2b120 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d2b130 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d2b140 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d2b150 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d2b160 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d2b170 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d2b180 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d2b190 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d2b1a0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d2b1b0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d2b1c0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d2b1d0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d2b1e0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d2b1f0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d2b200 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2b210 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d2b220 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d2b230 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d2b240 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d2b250 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d2b260 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d2b270 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d2b280 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d2b290 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d2b2a0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d2b2b0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d2b2c0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d2b2d0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d2b2e0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d2b2f0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d2b300 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d2b310 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d2b320 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d2b330 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d2b340 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d2b350 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d2b360 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d2b370 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d2b380 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d2b390 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d2b3a0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d2b3b0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d2b3c0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d2b3d0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d2b3e0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d2b3f0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d2b400 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d2b410 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d2b420 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d2b430 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d2b440 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d2b450 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d2b460 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d2b470 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d2b480 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d2b490 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d2b4a0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d2b4b0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d2b4c0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d2b4d0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d2b4e0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d2b4f0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d2b500 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d2b510 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d2b520 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d2b530 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d2b540 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d2b550 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d2b560 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d2b570 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d2b580 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d2b590 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d2b5a0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d2b5b0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d2b5c0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d2b5d0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d2b5e0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d2b5f0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d2b600 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d2b610 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d2b620 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d2b630 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d2b640 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d2b650 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d2b660 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00d2b670 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ - 0x00d2b680 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ - 0x00d2b690 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ - 0x00d2b6a0 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ - 0x00d2b6b0 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ - 0x00d2b6c0 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00d2b6d0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00d2b6e0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d2b6f0 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ - 0x00d2b700 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ - 0x00d2b710 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00d2b720 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00d2b730 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00d2b740 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d2b750 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00d2b760 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00d2b770 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00d2b780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2b790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2b7a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2b7b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2b7c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2b7d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2b7e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2b7f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2b800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2b810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2b820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2b830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2b840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2b850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2b860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2b870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2b880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2b890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2b8a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2b8b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2b8c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2b8d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d2b8e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d2b8f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d2b900 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d2b910 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00d2b920 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00d2b930 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00d2b940 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00d2b950 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d2b960 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d2b970 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d2b980 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d2b990 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d2b9a0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d2b9b0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d2b9c0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d2b9d0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d2b9e0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d2b9f0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d2ba00 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d2ba10 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d2ba20 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d2ba30 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00d2ba40 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d2ba50 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00d2ba60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d2ba70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d2ba80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d2ba90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d2baa0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d2bab0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d2bac0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d2bad0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d2bae0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d2baf0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d2bb00 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d2bb10 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d2bb20 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d2bb30 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d2bb40 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d2bb50 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d2bb60 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d2bb70 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d2bb80 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d2bb90 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d2bba0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2bbb0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d2bbc0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d2bbd0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d2bbe0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d2bbf0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d2bc00 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d2bc10 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d2bc20 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d2bc30 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d2bc40 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d2bc50 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d2bc60 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d2bc70 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d2bc80 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d2bc90 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d2bca0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d2bcb0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d2bcc0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d2bcd0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d2bce0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d2bcf0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d2bd00 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d2bd10 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d2bd20 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d2bd30 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d2bd40 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d2bd50 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d2bd60 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d2bd70 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d2bd80 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d2bd90 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d2bda0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d2bdb0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d2bdc0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d2bdd0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d2bde0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d2bdf0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d2be00 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d2be10 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d2be20 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d2be30 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d2be40 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d2be50 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d2be60 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d2be70 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d2be80 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d2be90 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d2bea0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d2beb0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d2bec0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d2bed0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d2bee0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d2bef0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d2bf00 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d2bf10 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d2bf20 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d2bf30 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d2bf40 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d2bf50 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d2bf60 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d2bf70 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d2bf80 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d2bf90 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d2bfa0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d2bfb0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d2bfc0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d2bfd0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d2bfe0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d2bff0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d2c000 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00d2c010 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00d2c020 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00d2c030 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00d2c040 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00d2c050 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00d2c060 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d2c070 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00d2c080 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00d2c090 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d2c0a0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00d2c0b0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d2c0c0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00d2c0d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d2c0e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d2c0f0 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00d2c100 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00d2c110 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00d2c120 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00d2c130 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00d2c140 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d2c150 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00d2c160 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00d2c170 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00d2c180 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2c190 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2c1a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2c1b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2c1c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2c1d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2c1e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2c1f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2c200 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2c210 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2c220 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2c230 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2c240 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2c250 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2c260 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2c270 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2c280 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2c290 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2c2a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2c2b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2c2c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2c2d0 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00d2c2e0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00d2c2f0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00d2c300 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00d2c310 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d2c320 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d2c330 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d2c340 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d2c350 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d2c360 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d2c370 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d2c380 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00d2c390 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d2c3a0 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00d2c3b0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d2c3c0 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00d2c3d0 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00d2c3e0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00d2c3f0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d2c400 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00d2c410 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00d2c420 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d2c430 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d2c440 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d2c450 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d2c460 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d2c470 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d2c480 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d2c490 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d2c4a0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d2c4b0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d2c4c0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d22510 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d22520 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00d22530 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d22540 2020696e 20666c6f 61742076 5f68616c in float v_hal │ │ │ │ + 0x00d22550 664c656e 6774683b 200a2020 6f757420 fLength; . out │ │ │ │ + 0x00d22560 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00d22570 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d22580 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d22590 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d225a0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d225b0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d225c0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d225d0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d225e0 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00d225f0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d22600 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d22610 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d22620 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00d22630 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d22640 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00d22650 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d22660 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00d22670 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d22680 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d22690 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d226a0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d226b0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d226c0 32442075 5f6d6173 6b546578 3b200a20 2D u_maskTex; . │ │ │ │ + 0x00d226d0 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00d226e0 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00d226f0 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00d22700 6f6e7374 20666c6f 6174206b 4f75746c onst float kOutl │ │ │ │ + 0x00d22710 696e6554 68726573 686f6c64 31203d20 ineThreshold1 = │ │ │ │ + 0x00d22720 302e383b 200a2020 636f6e73 7420666c 0.8; . const fl │ │ │ │ + 0x00d22730 6f617420 6b4f7574 6c696e65 54687265 oat kOutlineThre │ │ │ │ + 0x00d22740 73686f6c 6432203d 20302e35 3b200a20 shold2 = 0.5; . │ │ │ │ + 0x00d22750 20636f6e 73742066 6c6f6174 206b4d61 const float kMa │ │ │ │ + 0x00d22760 736b4f70 61636974 79203d20 302e373b skOpacity = 0.7; │ │ │ │ + 0x00d22770 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d22780 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d22790 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d227a0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d227b0 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ + 0x00d227c0 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ + 0x00d227d0 72546578 2c20765f 636f6c6f 72546578 rTex, v_colorTex │ │ │ │ + 0x00d227e0 436f6f72 64293b20 0a202020 20666c6f Coord); . flo │ │ │ │ + 0x00d227f0 61742061 6c706861 436f6465 203d2063 at alphaCode = c │ │ │ │ + 0x00d22800 6f6c6f72 2e613b20 0a202020 20766563 olor.a; . vec │ │ │ │ + 0x00d22810 34206d61 736b203d 20746578 74757265 4 mask = texture │ │ │ │ + 0x00d22820 28755f6d 61736b54 65782c20 765f6d61 (u_maskTex, v_ma │ │ │ │ + 0x00d22830 736b5465 78436f6f 7264293b 200a2020 skTexCoord); . │ │ │ │ + 0x00d22840 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ + 0x00d22850 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ + 0x00d22860 6d6f6f74 68737465 70286b41 6e746961 moothstep(kAntia │ │ │ │ + 0x00d22870 6c696173 696e6754 68726573 686f6c64 liasingThreshold │ │ │ │ + 0x00d22880 2c20312e 302c2061 62732876 5f68616c , 1.0, abs(v_hal │ │ │ │ + 0x00d22890 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ + 0x00d228a0 20636f6c 6f722e72 6762203d 206d6978 color.rgb = mix │ │ │ │ + 0x00d228b0 28636f6c 6f722e72 67622c20 6d61736b (color.rgb, mask │ │ │ │ + 0x00d228c0 2e726762 202a206d 69782875 5f6c6967 .rgb * mix(u_lig │ │ │ │ + 0x00d228d0 68744172 726f7743 6f6c6f72 2e726762 htArrowColor.rgb │ │ │ │ + 0x00d228e0 2c20755f 6461726b 4172726f 77436f6c , u_darkArrowCol │ │ │ │ + 0x00d228f0 6f722e72 67622c20 73746570 28616c70 or.rgb, step(alp │ │ │ │ + 0x00d22900 6861436f 64652c20 302e3629 292c206d haCode, 0.6)), m │ │ │ │ + 0x00d22910 61736b2e 61202a20 6b4d6173 6b4f7061 ask.a * kMaskOpa │ │ │ │ + 0x00d22920 63697479 293b200a 20202020 69662028 city); . if ( │ │ │ │ + 0x00d22930 755f6f75 746c696e 65203e20 302e3029 u_outline > 0.0) │ │ │ │ + 0x00d22940 200a2020 20207b20 0a202020 20202063 . { . c │ │ │ │ + 0x00d22950 6f6c6f72 2e726762 203d206d 69782863 olor.rgb = mix(c │ │ │ │ + 0x00d22960 6f6c6f72 2e726762 2c20755f 6f75746c olor.rgb, u_outl │ │ │ │ + 0x00d22970 696e6543 6f6c6f72 2e726762 2c207374 ineColor.rgb, st │ │ │ │ + 0x00d22980 6570286b 4f75746c 696e6554 68726573 ep(kOutlineThres │ │ │ │ + 0x00d22990 686f6c64 312c2061 62732876 5f68616c hold1, abs(v_hal │ │ │ │ + 0x00d229a0 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ + 0x00d229b0 20202063 6f6c6f72 2e726762 203d206d color.rgb = m │ │ │ │ + 0x00d229c0 69782863 6f6c6f72 2e726762 2c20755f ix(color.rgb, u_ │ │ │ │ + 0x00d229d0 6f75746c 696e6543 6f6c6f72 2e726762 outlineColor.rgb │ │ │ │ + 0x00d229e0 2c20736d 6f6f7468 73746570 286b4f75 , smoothstep(kOu │ │ │ │ + 0x00d229f0 746c696e 65546872 6573686f 6c64322c tlineThreshold2, │ │ │ │ + 0x00d22a00 206b4f75 746c696e 65546872 6573686f kOutlineThresho │ │ │ │ + 0x00d22a10 6c64312c 20616273 28765f68 616c664c ld1, abs(v_halfL │ │ │ │ + 0x00d22a20 656e6774 68292929 3b200a20 2020207d ength))); . } │ │ │ │ + 0x00d22a30 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ + 0x00d22a40 72203d20 636f6c6f 723b200a 20207d20 r = color; . } │ │ │ │ + 0x00d22a50 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d22a60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d22a70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d22a80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d22a90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d22aa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d22ab0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d22ac0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d22ad0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d22ae0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d22af0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d22b00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d22b10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d22b20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d22b30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d22b40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d22b50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d22b60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d22b70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d22b80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d22b90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d22ba0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d22bb0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d22bc0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d22bd0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d22be0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d22bf0 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00d22c00 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ + 0x00d22c10 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ + 0x00d22c20 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ + 0x00d22c30 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d22c40 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ + 0x00d22c50 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ + 0x00d22c60 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d22c70 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d22c80 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d22c90 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d22ca0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d22cb0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d22cc0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d22cd0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d22ce0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d22cf0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d22d00 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d22d10 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d22d20 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d22d30 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d22d40 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d22d50 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d22d60 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d22d70 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d22d80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d22d90 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d22da0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d22db0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d22dc0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d22dd0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d22de0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d22df0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d22e00 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d22e10 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d22e20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d22e30 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d22e40 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d22e50 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d22e60 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d22e70 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d22e80 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d22e90 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d22ea0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d22eb0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d22ec0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d22ed0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d22ee0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d22ef0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d22f00 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d22f10 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d22f20 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d22f30 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d22f40 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d22f50 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d22f60 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d22f70 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d22f80 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d22f90 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d22fa0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d22fb0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d22fc0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d22fd0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d22fe0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d22ff0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d23000 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d23010 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d23020 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d23030 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d23040 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d23050 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d23060 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d23070 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d23080 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d23090 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d230a0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d230b0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d230c0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d230d0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d230e0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d230f0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d23100 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d23110 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d23120 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d23130 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d23140 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d23150 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d23160 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d23170 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d23180 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d23190 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d231a0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d231b0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d231c0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d231d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d231e0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d231f0 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ + 0x00d23200 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ + 0x00d23210 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ + 0x00d23220 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ + 0x00d23230 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00d23240 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ + 0x00d23250 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ + 0x00d23260 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ + 0x00d23270 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ + 0x00d23280 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ + 0x00d23290 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ + 0x00d232a0 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ + 0x00d232b0 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ + 0x00d232c0 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ + 0x00d232d0 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ + 0x00d232e0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00d232f0 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ + 0x00d23300 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ + 0x00d23310 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ + 0x00d23320 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ + 0x00d23330 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ + 0x00d23340 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d23350 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d23360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d23370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d23380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d23390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d233a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d233b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d233c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d233d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d233e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d233f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d23400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d23410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d23420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d23430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d23440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d23450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d23460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d23470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d23480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d23490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d234a0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d234b0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d234c0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d234d0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d234e0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d234f0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d23500 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d23510 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d23520 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00d23530 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d23540 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d23550 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d23560 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d23570 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00d23580 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00d23590 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00d235a0 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d235b0 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00d235c0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d235d0 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00d235e0 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d235f0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d23600 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00d23610 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00d23620 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00d23630 6c696e65 50617373 3b200a20 20636f6e linePass; . con │ │ │ │ + 0x00d23640 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d23650 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d23660 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d23670 6e282920 0a20207b 200a2020 23696664 n() . { . #ifd │ │ │ │ + 0x00d23680 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00d23690 2020204c 4f575f50 20766563 34206669 LOW_P vec4 fi │ │ │ │ + 0x00d236a0 6e616c43 6f6c6f72 203d2076 5f636f6c nalColor = v_col │ │ │ │ + 0x00d236b0 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ + 0x00d236c0 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ + 0x00d236d0 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ + 0x00d236e0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d236f0 636f6c6f 72546578 436f6f72 6473293b colorTexCoords); │ │ │ │ + 0x00d23700 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d23710 66696e61 6c436f6c 6f722e61 202a3d20 finalColor.a *= │ │ │ │ + 0x00d23720 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d23730 765f4672 6167436f 6c6f7220 3d206669 v_FragColor = fi │ │ │ │ + 0x00d23740 6e616c43 6f6c6f72 3b200a20 207d200a nalColor; . } . │ │ │ │ + 0x00d23750 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d23760 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d23770 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d23780 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d23790 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d237a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d237b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d237c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d237d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d237e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d237f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d23800 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d23810 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d23820 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d23830 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d23840 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d23850 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d23860 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d23870 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d23880 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d23890 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d238a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d238b0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d238c0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d238d0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d238e0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d238f0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d23900 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d23910 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d23920 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d23930 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d23940 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d23950 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d23960 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d23970 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d23980 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d23990 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d239a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d239b0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d239c0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d239d0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d239e0 733b200a 2020636f 6e737420 666c6f61 s; . const floa │ │ │ │ + 0x00d239f0 74206b41 6e746961 6c696173 696e6753 t kAntialiasingS │ │ │ │ + 0x00d23a00 63616c61 72203d20 302e393b 200a2020 calar = 0.9; . │ │ │ │ + 0x00d23a10 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d23a20 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d23a30 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ + 0x00d23a40 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d23a50 20666c6f 61742064 203d2064 6f742876 float d = dot(v │ │ │ │ + 0x00d23a60 5f726164 6975732e 78792c20 765f7261 _radius.xy, v_ra │ │ │ │ + 0x00d23a70 64697573 2e787929 3b200a20 20202076 dius.xy); . v │ │ │ │ + 0x00d23a80 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d23a90 20765f63 6f6c6f72 3b200a20 20202066 v_color; . f │ │ │ │ + 0x00d23aa0 6c6f6174 20616152 61646975 73203d20 loat aaRadius = │ │ │ │ + 0x00d23ab0 765f7261 64697573 2e7a202a 206b416e v_radius.z * kAn │ │ │ │ + 0x00d23ac0 7469616c 69617369 6e675363 616c6172 tialiasingScalar │ │ │ │ + 0x00d23ad0 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ + 0x00d23ae0 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ + 0x00d23af0 74657028 61615261 64697573 202a2061 tep(aaRadius * a │ │ │ │ + 0x00d23b00 61526164 6975732c 20765f72 61646975 aRadius, v_radiu │ │ │ │ + 0x00d23b10 732e7a20 2a20765f 72616469 75732e7a s.z * v_radius.z │ │ │ │ + 0x00d23b20 2c206429 3b200a20 20202066 696e616c , d); . final │ │ │ │ + 0x00d23b30 436f6c6f 722e6120 3d206669 6e616c43 Color.a = finalC │ │ │ │ + 0x00d23b40 6f6c6f72 2e61202a 20755f6f 70616369 olor.a * u_opaci │ │ │ │ + 0x00d23b50 7479202a 2028312e 30202d20 73746570 ty * (1.0 - step │ │ │ │ + 0x00d23b60 56616c75 65293b20 0a202020 20765f46 Value); . v_F │ │ │ │ + 0x00d23b70 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ + 0x00d23b80 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ + 0x00d23b90 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d23ba0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d23bb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d23bc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d23bd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d23be0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d23bf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d23c00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d23c10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d23c20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d23c30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d23c40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d23c50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d23c60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d23c70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d23c80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d23c90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d23ca0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d23cb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d23cc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d23cd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d23ce0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d23cf0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d23d00 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d23d10 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ + 0x00d23d20 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00d23d30 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ + 0x00d23d40 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d23d50 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d23d60 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d23d70 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d23d80 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d23d90 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d23da0 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ + 0x00d23db0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d23dc0 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ + 0x00d23dd0 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d23de0 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ + 0x00d23df0 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ + 0x00d23e00 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ + 0x00d23e10 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ + 0x00d23e20 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ + 0x00d23e30 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ + 0x00d23e40 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d23e50 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00d23e60 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d23e70 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d23e80 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d23e90 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d23ea0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d23eb0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d23ec0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d23ed0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d23ee0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d23ef0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d23f00 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d23f10 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d23f20 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d23f30 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d23f40 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d23f50 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d23f60 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d23f70 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d23f80 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d23f90 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d23fa0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d23fb0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d23fc0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d23fd0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d23fe0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d23ff0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d24000 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d24010 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d24020 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d24030 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d24040 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d24050 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d24060 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d24070 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d24080 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d24090 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d240a0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d240b0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d240c0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d240d0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d240e0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d240f0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d24100 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d24110 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d24120 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d24130 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d24140 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d24150 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d24160 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d24170 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d24180 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d24190 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d241a0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d241b0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d241c0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d241d0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d241e0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d241f0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d24200 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d24210 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d24220 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d24230 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d24240 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d24250 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d24260 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d24270 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d24280 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d24290 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d242a0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d242b0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d242c0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d242d0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d242e0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d242f0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d24300 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d24310 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d24320 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d24330 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d24340 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d24350 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d24360 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d24370 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d24380 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d24390 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d243a0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d243b0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d243c0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d243d0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d243e0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d243f0 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00d24400 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00d24410 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00d24420 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d24430 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00d24440 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ + 0x00d24450 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d24460 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ + 0x00d24470 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ + 0x00d24480 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d24490 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d244a0 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00d244b0 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ + 0x00d244c0 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00d244d0 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00d244e0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d244f0 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ + 0x00d24500 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d24510 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d24520 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d24530 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d24540 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d24550 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d24560 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d24570 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d24580 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d24590 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d245a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d245b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d245c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d245d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d245e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d245f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d24600 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d24610 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d24620 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d24630 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d24640 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d24650 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d24660 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d24670 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d24680 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d24690 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d246a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d246b0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d246c0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d246d0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d246e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d246f0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d24700 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d24710 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d24720 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d24730 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d24740 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d24750 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d24760 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d24770 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d24780 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d24790 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d247a0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d247b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d247c0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d247d0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d247e0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d247f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d24800 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d24810 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00d24820 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00d24830 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00d24840 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d24850 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d24860 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d24870 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ + 0x00d24880 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ + 0x00d24890 50207665 63342066 696e616c 436f6c6f P vec4 finalColo │ │ │ │ + 0x00d248a0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00d248b0 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ + 0x00d248c0 20766563 34206669 6e616c43 6f6c6f72 vec4 finalColor │ │ │ │ + 0x00d248d0 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ + 0x00d248e0 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ + 0x00d248f0 78436f6f 72647329 3b200a20 2023656e xCoords); . #en │ │ │ │ + 0x00d24900 64696620 0a202020 20666c6f 61742073 dif . float s │ │ │ │ + 0x00d24910 6d616c6c 52616469 7573203d 20765f72 mallRadius = v_r │ │ │ │ + 0x00d24920 61646975 732e7a20 2d206161 50697865 adius.z - aaPixe │ │ │ │ + 0x00d24930 6c73436f 756e743b 200a2020 2020666c lsCount; . fl │ │ │ │ + 0x00d24940 6f617420 73746570 56616c75 65203d20 oat stepValue = │ │ │ │ + 0x00d24950 736d6f6f 74687374 65702873 6d616c6c smoothstep(small │ │ │ │ + 0x00d24960 52616469 7573202a 20736d61 6c6c5261 Radius * smallRa │ │ │ │ + 0x00d24970 64697573 2c20765f 72616469 75732e7a dius, v_radius.z │ │ │ │ + 0x00d24980 202a2076 5f726164 6975732e 7a2c200a * v_radius.z, . │ │ │ │ + 0x00d24990 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d249a0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d249b0 20765f72 61646975 732e7820 2a20765f v_radius.x * v_ │ │ │ │ + 0x00d249c0 72616469 75732e78 202b2076 5f726164 radius.x + v_rad │ │ │ │ + 0x00d249d0 6975732e 79202a20 765f7261 64697573 ius.y * v_radius │ │ │ │ + 0x00d249e0 2e79293b 200a2020 20206669 6e616c43 .y); . finalC │ │ │ │ + 0x00d249f0 6f6c6f72 2e61203d 2066696e 616c436f olor.a = finalCo │ │ │ │ + 0x00d24a00 6c6f722e 61202a20 755f6f70 61636974 lor.a * u_opacit │ │ │ │ + 0x00d24a10 79202a20 28312e30 202d2073 74657056 y * (1.0 - stepV │ │ │ │ + 0x00d24a20 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ + 0x00d24a30 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d24a40 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d24a50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d24a60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d24a70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d24a80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d24a90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d24aa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d24ab0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d24ac0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d24ad0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d24ae0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d24af0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d24b00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d24b10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d24b20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d24b30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d24b40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d24b50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d24b60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d24b70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d24b80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d24b90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d24ba0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d24bb0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d24bc0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d24bd0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d24be0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d24bf0 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00d24c00 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00d24c10 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00d24c20 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00d24c30 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d24c40 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d24c50 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d24c60 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d24c70 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d24c80 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d24c90 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d24ca0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d24cb0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d24cc0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d24cd0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d24ce0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d24cf0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d24d00 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d24d10 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d24d20 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d24d30 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d24d40 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d24d50 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d24d60 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d24d70 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d24d80 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d24d90 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d24da0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d24db0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d24dc0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d24dd0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d24de0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d24df0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d24e00 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d24e10 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d24e20 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d24e30 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d24e40 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d24e50 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d24e60 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d24e70 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d24e80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d24e90 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d24ea0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d24eb0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d24ec0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d24ed0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d24ee0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d24ef0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d24f00 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d24f10 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d24f20 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d24f30 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d24f40 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d24f50 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d24f60 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d24f70 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d24f80 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d24f90 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d24fa0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d24fb0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d24fc0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d24fd0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d24fe0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d24ff0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d25000 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d25010 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d25020 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d25030 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d25040 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d25050 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d25060 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d25070 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d25080 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d25090 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d250a0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d250b0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d250c0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d250d0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d250e0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d250f0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d25100 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d25110 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d25120 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d25130 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d25140 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d25150 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d25160 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d25170 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d25180 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d25190 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d251a0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d251b0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d251c0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d251d0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d251e0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d251f0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d25200 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d25210 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d25220 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d25230 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d25240 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d25250 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d25260 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d25270 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d25280 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d25290 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d252a0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d252b0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d252c0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d252d0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d252e0 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00d252f0 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ + 0x00d25300 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ + 0x00d25310 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ + 0x00d25320 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ + 0x00d25330 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ + 0x00d25340 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00d25350 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00d25360 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d25370 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ + 0x00d25380 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ + 0x00d25390 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00d253a0 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00d253b0 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00d253c0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d253d0 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00d253e0 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00d253f0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d25400 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d25410 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d25420 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d25430 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d25440 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d25450 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d25460 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d25470 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d25480 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d25490 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d254a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d254b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d254c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d254d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d254e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d254f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d25500 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d25510 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d25520 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d25530 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d25540 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d25550 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00d25560 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00d25570 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00d25580 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d25590 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d255a0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d255b0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d255c0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d255d0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d255e0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d255f0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d25600 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00d25610 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d25620 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00d25630 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d25640 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00d25650 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00d25660 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00d25670 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d25680 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d25690 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00d256a0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d256b0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d256c0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d256d0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d256e0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d256f0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d25700 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d25710 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d25720 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d25730 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d25740 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d25750 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d25760 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d25770 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d25780 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d25790 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d257a0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d257b0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d257c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d257d0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d257e0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d257f0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d25800 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d25810 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d25820 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d25830 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d25840 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d25850 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d25860 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d25870 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d25880 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d25890 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d258a0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d258b0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d258c0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d258d0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d258e0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d258f0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d25900 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d25910 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d25920 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d25930 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d25940 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d25950 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d25960 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d25970 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d25980 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d25990 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d259a0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d259b0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d259c0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d259d0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d259e0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d259f0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d25a00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d25a10 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d25a20 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d25a30 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d25a40 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d25a50 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d25a60 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d25a70 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d25a80 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d25a90 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d25aa0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d25ab0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d25ac0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d25ad0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d25ae0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d25af0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d25b00 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d25b10 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d25b20 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d25b30 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d25b40 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d25b50 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d25b60 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d25b70 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d25b80 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d25b90 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d25ba0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d25bb0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d25bc0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d25bd0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d25be0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d25bf0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d25c00 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d25c10 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d25c20 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d25c30 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d25c40 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ + 0x00d25c50 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ + 0x00d25c60 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ + 0x00d25c70 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ + 0x00d25c80 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ + 0x00d25c90 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ + 0x00d25ca0 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ + 0x00d25cb0 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ + 0x00d25cc0 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ + 0x00d25cd0 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ + 0x00d25ce0 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ + 0x00d25cf0 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ + 0x00d25d00 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ + 0x00d25d10 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ + 0x00d25d20 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ + 0x00d25d30 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d25d40 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d25d50 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ + 0x00d25d60 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ + 0x00d25d70 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ + 0x00d25d80 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ + 0x00d25d90 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ + 0x00d25da0 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ + 0x00d25db0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00d25dc0 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ + 0x00d25dd0 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ + 0x00d25de0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d25df0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d25e00 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ + 0x00d25e10 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ + 0x00d25e20 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00d25e30 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00d25e40 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d25e50 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d25e60 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d25e70 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d25e80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d25e90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d25ea0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d25eb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d25ec0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d25ed0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d25ee0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d25ef0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d25f00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d25f10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d25f20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d25f30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d25f40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d25f50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d25f60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d25f70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d25f80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d25f90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d25fa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d25fb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d25fc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d25fd0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ + 0x00d25fe0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d25ff0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d26000 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00d26010 73742066 6c6f6174 20616150 6978656c st float aaPixel │ │ │ │ + 0x00d26020 73436f75 6e74203d 20322e35 3b200a20 sCount = 2.5; . │ │ │ │ + 0x00d26030 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d26040 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d26050 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d26060 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d26070 20207665 63342066 696e616c 436f6c6f vec4 finalColo │ │ │ │ + 0x00d26080 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00d26090 2020666c 6f617420 736d616c 6c526164 float smallRad │ │ │ │ + 0x00d260a0 69757320 3d20765f 72616469 75732e7a ius = v_radius.z │ │ │ │ + 0x00d260b0 202d2061 61506978 656c7343 6f756e74 - aaPixelsCount │ │ │ │ + 0x00d260c0 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ + 0x00d260d0 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ + 0x00d260e0 74657028 736d616c 6c526164 69757320 tep(smallRadius │ │ │ │ + 0x00d260f0 2a20736d 616c6c52 61646975 732c2076 * smallRadius, v │ │ │ │ + 0x00d26100 5f726164 6975732e 7a202a20 765f7261 _radius.z * v_ra │ │ │ │ + 0x00d26110 64697573 2e7a2c20 0a202020 20202020 dius.z, . │ │ │ │ + 0x00d26120 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d26130 20202020 20202020 20646f74 28765f72 dot(v_r │ │ │ │ + 0x00d26140 61646975 732e7879 2c20765f 72616469 adius.xy, v_radi │ │ │ │ + 0x00d26150 75732e78 7929293b 200a2020 20206669 us.xy)); . fi │ │ │ │ + 0x00d26160 6e616c43 6f6c6f72 2e61203d 2066696e nalColor.a = fin │ │ │ │ + 0x00d26170 616c436f 6c6f722e 61202a20 28312e30 alColor.a * (1.0 │ │ │ │ + 0x00d26180 202d2073 74657056 616c7565 293b200a - stepValue); . │ │ │ │ + 0x00d26190 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ + 0x00d261a0 6f722e61 203c2030 2e303129 200a2020 or.a < 0.01) . │ │ │ │ + 0x00d261b0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00d261c0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d261d0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d261e0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d261f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d26200 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d26210 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d26220 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d26230 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d26240 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d26250 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d26260 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d26270 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d26280 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d26290 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d262a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d262b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d262c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d262d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d262e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d262f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d26300 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d26310 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d26320 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d26330 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d26340 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d26350 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d26360 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d26370 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d26380 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d26390 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00d263a0 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ + 0x00d263b0 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00d263c0 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ + 0x00d263d0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d263e0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d263f0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d26400 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d26410 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d26420 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d26430 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d26440 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d26450 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d26460 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d26470 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d26480 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d26490 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d264a0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d264b0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d264c0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d264d0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d264e0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d264f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d26500 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d26510 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d26520 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d26530 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d26540 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d26550 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d26560 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d26570 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d26580 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d26590 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d265a0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d265b0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d265c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d265d0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d265e0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d265f0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d26600 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d26610 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d26620 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d26630 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d26640 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d26650 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d26660 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d26670 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d26680 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d26690 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d266a0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d266b0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d266c0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d266d0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d266e0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d266f0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d26700 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d26710 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d26720 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d26730 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d26740 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d26750 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d26760 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d26770 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d26780 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d26790 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d267a0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d267b0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d267c0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d267d0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d267e0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d267f0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d26800 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d26810 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d26820 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d26830 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d26840 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d26850 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d26860 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d26870 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d26880 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d26890 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d268a0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d268b0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d268c0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d268d0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d268e0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d268f0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d26900 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d26910 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d26920 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d26930 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d26940 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d26950 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d26960 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ + 0x00d26970 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d26980 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ + 0x00d26990 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ + 0x00d269a0 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00d269b0 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ + 0x00d269c0 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ + 0x00d269d0 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ + 0x00d269e0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d269f0 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ + 0x00d26a00 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ + 0x00d26a10 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d26a20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d26a30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d26a40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d26a50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d26a60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d26a70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d26a80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d26a90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d26aa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d26ab0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d26ac0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d26ad0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d26ae0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d26af0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d26b00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d26b10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d26b20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d26b30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d26b40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d26b50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d26b60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d26b70 63342076 5f636f6c 6f723b20 0a20206f c4 v_color; . o │ │ │ │ + 0x00d26b80 75742076 65633420 765f4672 6167436f ut vec4 v_FragCo │ │ │ │ + 0x00d26b90 6c6f723b 200a2020 636f6e73 7420666c lor; . const fl │ │ │ │ + 0x00d26ba0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d26bb0 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d26bc0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d26bd0 20207b20 0a202020 20765f46 72616743 { . v_FragC │ │ │ │ + 0x00d26be0 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ + 0x00d26bf0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d26c00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d26c10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d26c20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d26c30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d26c40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d26c50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d26c60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d26c70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d26c80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d26c90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d26ca0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d26cb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d26cc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d26cd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d26ce0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d26cf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d26d00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d26d10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d26d20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d26d30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d26d40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d26d50 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d26d60 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d26d70 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ + 0x00d26d80 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ + 0x00d26d90 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d26da0 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ + 0x00d26db0 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ + 0x00d26dc0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d26dd0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d26de0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d26df0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d26e00 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d26e10 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d26e20 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d26e30 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d26e40 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d26e50 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d26e60 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d26e70 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d26e80 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d26e90 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d26ea0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d26eb0 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d26ec0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d26ed0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d26ee0 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d26ef0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d26f00 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d26f10 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ + 0x00d26f20 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d26f30 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d26f40 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d26f50 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ + 0x00d26f60 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ + 0x00d26f70 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ + 0x00d26f80 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ + 0x00d26f90 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d26fa0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d26fb0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d26fc0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d26fd0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d26fe0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d26ff0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d27000 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d27010 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d27020 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d27030 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d27040 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d27050 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d27060 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d27070 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d27080 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d27090 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d270a0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d270b0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d270c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d270d0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d270e0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d270f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d27100 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d27110 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d27120 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d27130 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d27140 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d27150 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d27160 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d27170 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d27180 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d27190 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d271a0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d271b0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d271c0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d271d0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d271e0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d271f0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d27200 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d27210 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d27220 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d27230 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d27240 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d27250 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d27260 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d27270 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d27280 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d27290 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d272a0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d272b0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d272c0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d272d0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d272e0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d272f0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d27300 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d27310 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d27320 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d27330 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d27340 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d27350 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d27360 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d27370 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d27380 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d27390 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d273a0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d273b0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d273c0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d273d0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d273e0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d273f0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d27400 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d27410 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d27420 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d27430 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d27440 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d27450 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d27460 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d27470 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d27480 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d27490 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d274a0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d274b0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d274c0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d274d0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d274e0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d274f0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d27500 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d27510 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d27520 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ + 0x00d27530 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ + 0x00d27540 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ + 0x00d27550 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ + 0x00d27560 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ + 0x00d27570 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ + 0x00d27580 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ + 0x00d27590 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ + 0x00d275a0 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ + 0x00d275b0 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ + 0x00d275c0 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ + 0x00d275d0 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ + 0x00d275e0 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ + 0x00d275f0 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ + 0x00d27600 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ + 0x00d27610 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00d27620 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ + 0x00d27630 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ + 0x00d27640 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00d27650 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00d27660 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00d27670 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00d27680 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d27690 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00d276a0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00d276b0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00d276c0 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ + 0x00d276d0 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ + 0x00d276e0 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ + 0x00d276f0 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ + 0x00d27700 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ + 0x00d27710 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ + 0x00d27720 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00d27730 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ + 0x00d27740 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ + 0x00d27750 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ + 0x00d27760 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ + 0x00d27770 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ + 0x00d27780 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d27790 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00d277a0 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00d277b0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d277c0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d277d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d277e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d277f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d27800 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d27810 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d27820 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d27830 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d27840 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d27850 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d27860 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d27870 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d27880 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d27890 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d278a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d278b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d278c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d278d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d278e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d278f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d27900 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d27910 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d27920 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d27930 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d27940 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d27950 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d27960 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d27970 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d27980 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d27990 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d279a0 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00d279b0 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00d279c0 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00d279d0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d279e0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d279f0 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00d27a00 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d27a10 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d27a20 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00d27a30 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d27a40 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00d27a50 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d27a60 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d27a70 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ + 0x00d27a80 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d27a90 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00d27aa0 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00d27ab0 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00d27ac0 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ + 0x00d27ad0 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ + 0x00d27ae0 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ + 0x00d27af0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d27b00 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d27b10 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d27b20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d27b30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d27b40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d27b50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d27b60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d27b70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d27b80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d27b90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d27ba0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d27bb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d27bc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d27bd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d27be0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d27bf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d27c00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d27c10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d27c20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d27c30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d27c40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d27c50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d27c60 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d27c70 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d27c80 6f6c6f72 5465783b 200a2020 696e2076 olorTex; . in v │ │ │ │ + 0x00d27c90 65633320 765f7465 78436f6f 7264733b ec3 v_texCoords; │ │ │ │ + 0x00d27ca0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d27cb0 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ + 0x00d27cc0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d27cd0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d27ce0 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d27cf0 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ + 0x00d27d00 46726167 436f6c6f 72203d20 74657874 FragColor = text │ │ │ │ + 0x00d27d10 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d27d20 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ + 0x00d27d30 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d27d40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d27d50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d27d60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d27d70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d27d80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d27d90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d27da0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d27db0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d27dc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d27dd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d27de0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d27df0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d27e00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d27e10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d27e20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d27e30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d27e40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d27e50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d27e60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d27e70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d27e80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d27e90 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d27ea0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d27eb0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d27ec0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d27ed0 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ + 0x00d27ee0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d27ef0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d27f00 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d27f10 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d27f20 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d27f30 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d27f40 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d27f50 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d27f60 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ + 0x00d27f70 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d27f80 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00d27f90 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ + 0x00d27fa0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d27fb0 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ + 0x00d27fc0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d27fd0 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ + 0x00d27fe0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d27ff0 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ + 0x00d28000 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d28010 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ + 0x00d28020 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ + 0x00d28030 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ + 0x00d28040 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d28050 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ + 0x00d28060 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d28070 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ + 0x00d28080 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d28090 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d280a0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d280b0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d280c0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d280d0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d280e0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d280f0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d28100 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d28110 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d28120 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d28130 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d28140 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d28150 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d28160 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d28170 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d28180 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d28190 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d281a0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d281b0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d281c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d281d0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d281e0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d281f0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d28200 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d28210 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d28220 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d28230 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d28240 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d28250 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d28260 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d28270 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d28280 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d28290 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d282a0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d282b0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d282c0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d282d0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d282e0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d282f0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d28300 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d28310 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d28320 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d28330 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d28340 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d28350 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d28360 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d28370 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d28380 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d28390 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d283a0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d283b0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d283c0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d283d0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d283e0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d283f0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d28400 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d28410 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d28420 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d28430 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d28440 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d28450 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d28460 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d28470 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d28480 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d28490 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d284a0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d284b0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d284c0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d284d0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d284e0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d284f0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d28500 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d28510 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d28520 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d28530 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d28540 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d28550 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d28560 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d28570 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d28580 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d28590 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d285a0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d285b0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d285c0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d285d0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d285e0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d285f0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d28600 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d28610 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d28620 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d28630 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d28640 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ + 0x00d28650 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ + 0x00d28660 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00d28670 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ + 0x00d28680 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ + 0x00d28690 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ + 0x00d286a0 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ + 0x00d286b0 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ + 0x00d286c0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d286d0 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ + 0x00d286e0 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ + 0x00d286f0 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ + 0x00d28700 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ + 0x00d28710 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ + 0x00d28720 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ + 0x00d28730 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ + 0x00d28740 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ + 0x00d28750 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d28760 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ + 0x00d28770 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ + 0x00d28780 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ + 0x00d28790 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ + 0x00d287a0 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ + 0x00d287b0 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ + 0x00d287c0 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ + 0x00d287d0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00d287e0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00d287f0 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d28800 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d28810 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00d28820 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d28830 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ + 0x00d28840 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ + 0x00d28850 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ + 0x00d28860 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d28870 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d28880 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d28890 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d288a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d288b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d288c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d288d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d288e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d288f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d28900 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d28910 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d28920 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d28930 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d28940 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d28950 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d28960 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d28970 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d28980 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d28990 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d289a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d289b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d289c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d289d0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d289e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d289f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d28a00 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d28a10 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d28a20 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d28a30 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d28a40 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d28a50 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d28a60 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d28a70 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d28a80 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d28a90 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ + 0x00d28aa0 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d28ab0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d28ac0 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ + 0x00d28ad0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d28ae0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00d28af0 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ + 0x00d28b00 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d28b10 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d28b20 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00d28b30 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00d28b40 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d28b50 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d28b60 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d28b70 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00d28b80 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d28b90 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d28ba0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00d28bb0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d28bc0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00d28bd0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00d28be0 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00d28bf0 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00d28c00 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00d28c10 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00d28c20 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d28c30 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00d28c40 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d28c50 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00d28c60 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00d28c70 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00d28c80 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00d28c90 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00d28ca0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00d28cb0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d28cc0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00d28cd0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00d28ce0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d28cf0 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00d28d00 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00d28d10 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00d28d20 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00d28d30 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d28d40 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d28d50 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d28d60 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00d28d70 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00d28d80 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00d28d90 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00d28da0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d28db0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d28dc0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d28dd0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00d28de0 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00d28df0 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00d28e00 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00d28e10 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00d28e20 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00d28e30 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d28e40 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00d28e50 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00d28e60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d28e70 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00d28e80 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00d28e90 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00d28ea0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00d28eb0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d28ec0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00d28ed0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00d28ee0 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00d28ef0 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00d28f00 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00d28f10 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d28f20 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00d28f30 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00d28f40 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d28f50 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00d28f60 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d28f70 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00d28f80 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00d28f90 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00d28fa0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00d28fb0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00d28fc0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00d28fd0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00d28fe0 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00d28ff0 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00d29000 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00d29010 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00d29020 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00d29030 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00d29040 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00d29050 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00d29060 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00d29070 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d29080 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00d29090 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00d290a0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d290b0 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00d290c0 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ + 0x00d290d0 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ + 0x00d290e0 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ + 0x00d290f0 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ + 0x00d29100 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d29110 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00d29120 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00d29130 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d29140 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00d29150 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ + 0x00d29160 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00d29170 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ + 0x00d29180 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ + 0x00d29190 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d291a0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d291b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d291c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d291d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d291e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d291f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d29200 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d29210 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d29220 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d29230 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d29240 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d29250 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d29260 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d29270 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d29280 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d29290 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d292a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d292b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d292c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d292d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d292e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d292f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d29300 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d29310 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d29320 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00d29330 765f6f66 66736574 3b200a20 206f7574 v_offset; . out │ │ │ │ + 0x00d29340 20766563 3420765f 46726167 436f6c6f vec4 v_FragColo │ │ │ │ + 0x00d29350 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d29360 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00d29370 4d657472 6963733b 200a2020 756e6966 Metrics; . unif │ │ │ │ + 0x00d29380 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d29390 636f6c6f 72546578 3b200a20 20756e69 colorTex; . uni │ │ │ │ + 0x00d293a0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d293b0 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ + 0x00d293c0 65783b20 0a202023 64656669 6e652053 ex; . #define S │ │ │ │ + 0x00d293d0 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00d293e0 726f2874 65782c20 636f6f72 64292074 ro(tex, coord) t │ │ │ │ + 0x00d293f0 65787475 72654c6f 64287465 782c2063 extureLod(tex, c │ │ │ │ + 0x00d29400 6f6f7264 2c20302e 3029200a 2020636f oord, 0.0) . co │ │ │ │ + 0x00d29410 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d29420 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d29430 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d29440 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d29450 65633420 613b200a 20202020 612e7820 ec4 a; . a.x │ │ │ │ + 0x00d29460 3d207465 78747572 6528755f 626c656e = texture(u_blen │ │ │ │ + 0x00d29470 64696e67 57656967 68745465 782c2076 dingWeightTex, v │ │ │ │ + 0x00d29480 5f6f6666 7365742e 7879292e 613b202f _offset.xy).a; / │ │ │ │ + 0x00d29490 2f205269 67687420 0a202020 20612e79 / Right . a.y │ │ │ │ + 0x00d294a0 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ + 0x00d294b0 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ + 0x00d294c0 765f6f66 66736574 2e7a7729 2e673b20 v_offset.zw).g; │ │ │ │ + 0x00d294d0 2f2f2054 6f70200a 20202020 612e777a // Top . a.wz │ │ │ │ + 0x00d294e0 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ + 0x00d294f0 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ + 0x00d29500 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d29510 292e787a 3b202f2f 20426f74 746f6d20 ).xz; // Bottom │ │ │ │ + 0x00d29520 2f204c65 6674200a 20202020 69662028 / Left . if ( │ │ │ │ + 0x00d29530 646f7428 612c2076 65633428 312e302c dot(a, vec4(1.0, │ │ │ │ + 0x00d29540 20312e30 2c20312e 302c2031 2e302929 1.0, 1.0, 1.0)) │ │ │ │ + 0x00d29550 203c2031 652d3529 200a2020 20207b20 < 1e-5) . { │ │ │ │ + 0x00d29560 0a202020 20202076 5f467261 67436f6c . v_FragCol │ │ │ │ + 0x00d29570 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d29580 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ + 0x00d29590 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ + 0x00d295a0 207d200a 20202020 656c7365 200a2020 } . else . │ │ │ │ + 0x00d295b0 20207b20 0a202020 20202076 65633420 { . vec4 │ │ │ │ + 0x00d295c0 626c656e 64696e67 4f666673 6574203d blendingOffset = │ │ │ │ + 0x00d295d0 20766563 3428302e 302c2061 2e792c20 vec4(0.0, a.y, │ │ │ │ + 0x00d295e0 302e302c 20612e77 293b200a 20202020 0.0, a.w); . │ │ │ │ + 0x00d295f0 20207665 63322062 6c656e64 696e6757 vec2 blendingW │ │ │ │ + 0x00d29600 65696768 74203d20 612e7977 3b200a20 eight = a.yw; . │ │ │ │ + 0x00d29610 20202020 20696620 286d6178 28612e78 if (max(a.x │ │ │ │ + 0x00d29620 2c20612e 7a29203e 206d6178 28612e79 , a.z) > max(a.y │ │ │ │ + 0x00d29630 2c20612e 77292920 0a202020 2020207b , a.w)) . { │ │ │ │ + 0x00d29640 200a2020 20202020 2020626c 656e6469 . blendi │ │ │ │ + 0x00d29650 6e674f66 66736574 203d2076 65633428 ngOffset = vec4( │ │ │ │ + 0x00d29660 612e782c 20302e30 2c20612e 7a2c2030 a.x, 0.0, a.z, 0 │ │ │ │ + 0x00d29670 2e30293b 200a2020 20202020 2020626c .0); . bl │ │ │ │ + 0x00d29680 656e6469 6e675765 69676874 203d2061 endingWeight = a │ │ │ │ + 0x00d29690 2e787a3b 200a2020 20202020 7d200a20 .xz; . } . │ │ │ │ + 0x00d296a0 20202020 20626c65 6e64696e 67576569 blendingWei │ │ │ │ + 0x00d296b0 67687420 2f3d2064 6f742862 6c656e64 ght /= dot(blend │ │ │ │ + 0x00d296c0 696e6757 65696768 742c2076 65633228 ingWeight, vec2( │ │ │ │ + 0x00d296d0 312e302c 20312e30 29293b20 0a202020 1.0, 1.0)); . │ │ │ │ + 0x00d296e0 20202076 65633420 6263203d 20626c65 vec4 bc = ble │ │ │ │ + 0x00d296f0 6e64696e 674f6666 73657420 2a207665 ndingOffset * ve │ │ │ │ + 0x00d29700 63342875 5f667261 6d656275 66666572 c4(u_framebuffer │ │ │ │ + 0x00d29710 4d657472 6963732e 78792c20 2d755f66 Metrics.xy, -u_f │ │ │ │ + 0x00d29720 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00d29730 732e7879 293b200a 20202020 20206263 s.xy); . bc │ │ │ │ + 0x00d29740 202b3d20 765f636f 6c6f7254 6578436f += v_colorTexCo │ │ │ │ + 0x00d29750 6f726473 2e787978 793b200a 20202020 ords.xyxy; . │ │ │ │ + 0x00d29760 20207665 63342063 6f6c6f72 203d2062 vec4 color = b │ │ │ │ + 0x00d29770 6c656e64 696e6757 65696768 742e7820 lendingWeight.x │ │ │ │ + 0x00d29780 2a20534d 41415361 6d706c65 4c657665 * SMAASampleLeve │ │ │ │ + 0x00d29790 6c5a6572 6f28755f 636f6c6f 72546578 lZero(u_colorTex │ │ │ │ + 0x00d297a0 2c206263 2e787929 3b200a20 20202020 , bc.xy); . │ │ │ │ + 0x00d297b0 20636f6c 6f72202b 3d20626c 656e6469 color += blendi │ │ │ │ + 0x00d297c0 6e675765 69676874 2e79202a 20534d41 ngWeight.y * SMA │ │ │ │ + 0x00d297d0 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00d297e0 28755f63 6f6c6f72 5465782c 2062632e (u_colorTex, bc. │ │ │ │ + 0x00d297f0 7a77293b 200a2020 20202020 765f4672 zw); . v_Fr │ │ │ │ + 0x00d29800 6167436f 6c6f7220 3d20636f 6c6f723b agColor = color; │ │ │ │ + 0x00d29810 200a2020 20207d20 0a20207d 200a0000 . } . } ... │ │ │ │ + 0x00d29820 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d29830 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d29840 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d29850 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d29860 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d29870 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d29880 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d29890 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d298a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d298b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d298c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d298d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d298e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d298f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d29900 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d29910 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d29920 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d29930 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d29940 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d29950 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d29960 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d29970 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d29980 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d29990 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d299a0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d299b0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d299c0 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ + 0x00d299d0 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ + 0x00d299e0 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ + 0x00d299f0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d29a00 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00d29a10 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ + 0x00d29a20 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ + 0x00d29a30 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d29a40 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d29a50 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d29a60 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d29a70 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d29a80 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d29a90 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d29aa0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d29ab0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d29ac0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d29ad0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d29ae0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d29af0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d29b00 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d29b10 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d29b20 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d29b30 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d29b40 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d29b50 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d29b60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d29b70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d29b80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d29b90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d29ba0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d29bb0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d29bc0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d29bd0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d29be0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d29bf0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d29c00 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d29c10 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d29c20 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d29c30 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d29c40 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d29c50 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d29c60 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d29c70 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d29c80 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d29c90 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d29ca0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d29cb0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d29cc0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d29cd0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d29ce0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d29cf0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d29d00 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d29d10 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d29d20 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d29d30 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d29d40 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d29d50 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d29d60 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d29d70 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d29d80 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d29d90 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d29da0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d29db0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d29dc0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d29dd0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d29de0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d29df0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d29e00 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d29e10 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d29e20 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d29e30 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d29e40 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d29e50 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d29e60 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d29e70 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d29e80 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d29e90 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d29ea0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d29eb0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d29ec0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d29ed0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d29ee0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d29ef0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d29f00 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d29f10 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d29f20 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d29f30 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d29f40 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d29f50 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d29f60 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d29f70 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d29f80 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d29f90 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d29fa0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d29fb0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d29fc0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d29fd0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d29fe0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d29ff0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d2a000 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d2a010 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d2a020 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d2a030 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d2a040 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d2a050 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d2a060 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d2a070 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d2a080 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d2a090 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d2a0a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d2a0b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d2a0c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d2a0d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d2a0e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d2a0f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d2a100 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00d2a110 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d2a120 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d2a130 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d2a140 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00d2a150 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ + 0x00d2a160 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d2a170 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d2a180 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ + 0x00d2a190 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ + 0x00d2a1a0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00d2a1b0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d2a1c0 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00d2a1d0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d2a1e0 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00d2a1f0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00d2a200 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00d2a210 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d2a220 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d2a230 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ + 0x00d2a240 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ + 0x00d2a250 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d2a260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2a270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2a280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2a290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2a2a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2a2b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2a2c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2a2d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2a2e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2a2f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2a300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2a310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2a320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2a330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2a340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2a350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2a360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2a370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2a380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2a390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2a3a0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d2a3b0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d2a3c0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d2a3d0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d2a3e0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d2a3f0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d2a400 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d2a410 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d2a420 23656e64 6966200a 20206f75 74207665 #endif . out ve │ │ │ │ + 0x00d2a430 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00d2a440 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d2a450 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d2a460 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d2a470 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00d2a480 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00d2a490 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00d2a4a0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00d2a4b0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00d2a4c0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d2a4d0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d2a4e0 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00d2a4f0 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00d2a500 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00d2a510 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00d2a520 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d2a530 696e6550 6173733b 200a2020 636f6e73 inePass; . cons │ │ │ │ + 0x00d2a540 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d2a550 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d2a560 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ + 0x00d2a570 2829200a 20207b20 0a202023 69666465 () . { . #ifde │ │ │ │ + 0x00d2a580 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d2a590 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00d2a5a0 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ + 0x00d2a5b0 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ + 0x00d2a5c0 50207665 63342063 6f6c6f72 203d2074 P vec4 color = t │ │ │ │ + 0x00d2a5d0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d2a5e0 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00d2a5f0 7264293b 200a2020 23656e64 6966200a rd); . #endif . │ │ │ │ + 0x00d2a600 20202020 636f6c6f 722e6120 2a3d2075 color.a *= u │ │ │ │ + 0x00d2a610 5f6f7061 63697479 3b200a20 20202076 _opacity; . v │ │ │ │ + 0x00d2a620 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ + 0x00d2a630 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d2a640 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2a650 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2a660 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2a670 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2a680 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2a690 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2a6a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2a6b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2a6c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2a6d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2a6e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2a6f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2a700 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2a710 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2a720 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2a730 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2a740 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2a750 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2a760 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2a770 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2a780 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2a790 63342076 5f746578 436f6f72 64733b20 c4 v_texCoords; │ │ │ │ + 0x00d2a7a0 0a202069 6e207665 63342076 5f6d6173 . in vec4 v_mas │ │ │ │ + 0x00d2a7b0 6b436f6c 6f723b20 0a20206f 75742076 kColor; . out v │ │ │ │ + 0x00d2a7c0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d2a7d0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d2a7e0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d2a7f0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d2a800 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ + 0x00d2a810 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ + 0x00d2a820 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ + 0x00d2a830 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d2a840 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ + 0x00d2a850 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d2a860 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ + 0x00d2a870 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d2a880 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d2a890 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ + 0x00d2a8a0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ + 0x00d2a8b0 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ + 0x00d2a8c0 6c696e65 50617373 3b200a20 20756e69 linePass; . uni │ │ │ │ + 0x00d2a8d0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d2a8e0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00d2a8f0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d2a900 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d2a910 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d2a920 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d2a930 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ + 0x00d2a940 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d2a950 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ + 0x00d2a960 200a2020 20207665 63342062 67436f6c . vec4 bgCol │ │ │ │ + 0x00d2a970 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d2a980 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ + 0x00d2a990 6f726473 2e7a7729 202a2076 65633428 ords.zw) * vec4( │ │ │ │ + 0x00d2a9a0 765f6d61 736b436f 6c6f722e 78797a2c v_maskColor.xyz, │ │ │ │ + 0x00d2a9b0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d2a9c0 2066696e 616c436f 6c6f7220 3d206d69 finalColor = mi │ │ │ │ + 0x00d2a9d0 7828636f 6c6f722c 206d6978 28626743 x(color, mix(bgC │ │ │ │ + 0x00d2a9e0 6f6c6f72 2c20636f 6c6f722c 20636f6c olor, color, col │ │ │ │ + 0x00d2a9f0 6f722e61 292c2062 67436f6c 6f722e61 or.a), bgColor.a │ │ │ │ + 0x00d2aa00 293b200a 20202020 66696e61 6c436f6c ); . finalCol │ │ │ │ + 0x00d2aa10 6f722e61 203d2063 6c616d70 28636f6c or.a = clamp(col │ │ │ │ + 0x00d2aa20 6f722e61 202b2062 67436f6c 6f722e61 or.a + bgColor.a │ │ │ │ + 0x00d2aa30 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00d2aa40 6f706163 69747920 2a20765f 6d61736b opacity * v_mask │ │ │ │ + 0x00d2aa50 436f6c6f 722e773b 200a2020 20206966 Color.w; . if │ │ │ │ + 0x00d2aa60 20286669 6e616c43 6f6c6f72 2e61203c (finalColor.a < │ │ │ │ + 0x00d2aa70 20302e30 3129200a 20202020 20206469 0.01) . di │ │ │ │ + 0x00d2aa80 73636172 643b200a 20202020 765f4672 scard; . v_Fr │ │ │ │ + 0x00d2aa90 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d2aaa0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d2aab0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2aac0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2aad0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2aae0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2aaf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2ab00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2ab10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2ab20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2ab30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2ab40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2ab50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2ab60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2ab70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2ab80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2ab90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2aba0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2abb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2abc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2abd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2abe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2abf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2ac00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2ac10 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d2ac20 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d2ac30 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ + 0x00d2ac40 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ + 0x00d2ac50 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ + 0x00d2ac60 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d2ac70 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ + 0x00d2ac80 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00d2ac90 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d2aca0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d2acb0 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ + 0x00d2acc0 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ + 0x00d2acd0 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00d2ace0 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d2acf0 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d2ad00 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d2ad10 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d2ad20 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d2ad30 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d2ad40 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d2ad50 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d2ad60 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d2ad70 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d2ad80 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d2ad90 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d2ada0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d2adb0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d2adc0 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d2add0 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ + 0x00d2ade0 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ + 0x00d2adf0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00d2ae00 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ + 0x00d2ae10 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d2ae20 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d2ae30 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d2ae40 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d2ae50 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d2ae60 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d2ae70 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d2ae80 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d2ae90 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d2aea0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d2aeb0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d2aec0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d2aed0 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d2aee0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d2aef0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d2af00 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d2af10 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d2af20 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d2af30 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d2af40 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d2af50 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d2af60 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d2af70 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d2af80 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d2af90 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d2afa0 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d2afb0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d2afc0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2afd0 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d2afe0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d2aff0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d2b000 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d2b010 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d2b020 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d2b030 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d2b040 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d2b050 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d2b060 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d2b070 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d2b080 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d2b090 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d2b0a0 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d2b0b0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d2b0c0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d2b0d0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d2b0e0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d2b0f0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d2b100 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d2b110 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d2b120 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d2b130 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d2b140 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d2b150 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d2b160 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d2b170 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2b180 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d2b190 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d2b1a0 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d2b1b0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d2b1c0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d2b1d0 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d2b1e0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d2b1f0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d2b200 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d2b210 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d2b220 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d2b230 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d2b240 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d2b250 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d2b260 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d2b270 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d2b280 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d2b290 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d2b2a0 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d2b2b0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d2b2c0 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d2b2d0 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d2b2e0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d2b2f0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d2b300 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d2b310 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d2b320 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d2b330 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d2b340 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d2b350 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d2b360 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d2b370 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d2b380 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d2b390 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d2b3a0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d2b3b0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d2b3c0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d2b3d0 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ + 0x00d2b3e0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d2b3f0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d2b400 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ + 0x00d2b410 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ + 0x00d2b420 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00d2b430 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00d2b440 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00d2b450 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00d2b460 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00d2b470 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ + 0x00d2b480 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ + 0x00d2b490 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00d2b4a0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d2b4b0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d2b4c0 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ + 0x00d2b4d0 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ + 0x00d2b4e0 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00d2b4f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2b500 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2b510 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2b520 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2b530 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2b540 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2b550 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2b560 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2b570 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2b580 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2b590 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2b5a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2b5b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2b5c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2b5d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2b5e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2b5f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2b600 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2b610 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2b620 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2b630 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2b640 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2b650 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d2b660 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d2b670 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ + 0x00d2b680 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ + 0x00d2b690 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d2b6a0 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ + 0x00d2b6b0 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ + 0x00d2b6c0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00d2b6d0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d2b6e0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d2b6f0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d2b700 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d2b710 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d2b720 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d2b730 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ + 0x00d2b740 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ + 0x00d2b750 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ + 0x00d2b760 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ + 0x00d2b770 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ + 0x00d2b780 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ + 0x00d2b790 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ + 0x00d2b7a0 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ + 0x00d2b7b0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d2b7c0 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ + 0x00d2b7d0 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00d2b7e0 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ + 0x00d2b7f0 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ + 0x00d2b800 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ + 0x00d2b810 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ + 0x00d2b820 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ + 0x00d2b830 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ + 0x00d2b840 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ + 0x00d2b850 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ + 0x00d2b860 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d2b870 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00d2b880 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d2b890 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d2b8a0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d2b8b0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d2b8c0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d2b8d0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d2b8e0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d2b8f0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d2b900 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d2b910 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d2b920 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d2b930 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d2b940 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d2b950 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d2b960 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d2b970 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d2b980 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d2b990 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d2b9a0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d2b9b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d2b9c0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d2b9d0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d2b9e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d2b9f0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d2ba00 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d2ba10 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d2ba20 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d2ba30 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d2ba40 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d2ba50 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d2ba60 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d2ba70 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d2ba80 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d2ba90 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d2baa0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d2bab0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d2bac0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d2bad0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d2bae0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d2baf0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d2bb00 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d2bb10 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d2bb20 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d2bb30 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d2bb40 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d2bb50 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d2bb60 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d2bb70 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d2bb80 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d2bb90 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d2bba0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d2bbb0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d2bbc0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d2bbd0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d2bbe0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d2bbf0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d2bc00 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d2bc10 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d2bc20 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d2bc30 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d2bc40 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d2bc50 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d2bc60 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d2bc70 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d2bc80 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d2bc90 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d2bca0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d2bcb0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d2bcc0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d2bcd0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d2bce0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d2bcf0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d2bd00 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d2bd10 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d2bd20 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d2bd30 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d2bd40 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d2bd50 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d2bd60 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d2bd70 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d2bd80 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d2bd90 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d2bda0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d2bdb0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d2bdc0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d2bdd0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d2bde0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d2bdf0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d2be00 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d2be10 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00d2be20 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00d2be30 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00d2be40 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d2be50 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00d2be60 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ + 0x00d2be70 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00d2be80 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ + 0x00d2be90 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ + 0x00d2bea0 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ + 0x00d2beb0 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ + 0x00d2bec0 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ + 0x00d2bed0 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ + 0x00d2bee0 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ + 0x00d2bef0 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ + 0x00d2bf00 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ + 0x00d2bf10 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d2bf20 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ + 0x00d2bf30 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ + 0x00d2bf40 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ + 0x00d2bf50 0a202020 20202020 20202020 20202020 . │ │ │ │ + 0x00d2bf60 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d2bf70 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d2bf80 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ + 0x00d2bf90 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ + 0x00d2bfa0 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ + 0x00d2bfb0 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ + 0x00d2bfc0 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ + 0x00d2bfd0 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ + 0x00d2bfe0 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ + 0x00d2bff0 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ + 0x00d2c000 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ + 0x00d2c010 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ + 0x00d2c020 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ + 0x00d2c030 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ + 0x00d2c040 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ + 0x00d2c050 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d2c060 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00d2c070 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ + 0x00d2c080 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ + 0x00d2c090 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ + 0x00d2c0a0 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ + 0x00d2c0b0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00d2c0c0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d2c0d0 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ + 0x00d2c0e0 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00d2c0f0 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d2c100 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2c110 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2c120 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2c130 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2c140 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2c150 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2c160 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2c170 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2c180 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2c190 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2c1a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2c1b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2c1c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2c1d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2c1e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2c1f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2c200 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2c210 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2c220 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2c230 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2c240 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2c250 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d2c260 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d2c270 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ + 0x00d2c280 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d2c290 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ + 0x00d2c2a0 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ + 0x00d2c2b0 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ + 0x00d2c2c0 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ + 0x00d2c2d0 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ + 0x00d2c2e0 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ + 0x00d2c2f0 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ + 0x00d2c300 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ + 0x00d2c310 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ + 0x00d2c320 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ + 0x00d2c330 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ + 0x00d2c340 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d2c350 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ + 0x00d2c360 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ + 0x00d2c370 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ + 0x00d2c380 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d2c390 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ + 0x00d2c3a0 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d2c3b0 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ + 0x00d2c3c0 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ + 0x00d2c3d0 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ + 0x00d2c3e0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d2c3f0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d2c400 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00d2c410 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d2c420 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d2c430 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d2c440 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00d2c450 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d2c460 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2c470 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00d2c480 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00d2c490 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00d2c4a0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d2c4b0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00d2c4c0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ 0x00d2c4d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d2c4e0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d2c4f0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d2c500 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d2c510 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d2c520 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d2c530 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d2c540 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d2c550 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d2c560 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d2c570 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d2c580 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d2c590 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d2c5a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d2c5b0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d2c5c0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d2c5d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2c5e0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d2c5f0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d2c600 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d2c610 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d2c620 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d2c630 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d2c640 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d2c650 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d2c660 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d2c670 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d2c680 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d2c690 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d2c6a0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d2c6b0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d2c6c0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d2c6d0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d2c6e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d2c6f0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d2c700 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d2c710 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d2c720 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d2c730 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d2c740 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d2c750 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d2c760 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d2c770 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d2c780 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2c790 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d2c7a0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d2c7b0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d2c7c0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d2c7d0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d2c7e0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d2c7f0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d2c800 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d2c810 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d2c820 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d2c830 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d2c840 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d2c850 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d2c860 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d2c870 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d2c880 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d2c890 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d2c8a0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d2c8b0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d2c8c0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d2c8d0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d2c8e0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d2c8f0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d2c900 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d2c910 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d2c920 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d2c930 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d2c940 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d2c950 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d2c960 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d2c970 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d2c980 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d2c990 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d2c9a0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d2c9b0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d2c9c0 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ - 0x00d2c9d0 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ - 0x00d2c9e0 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ - 0x00d2c9f0 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ - 0x00d2ca00 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ - 0x00d2ca10 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ - 0x00d2ca20 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ - 0x00d2ca30 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ - 0x00d2ca40 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ - 0x00d2ca50 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ - 0x00d2ca60 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ - 0x00d2ca70 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ - 0x00d2ca80 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ - 0x00d2ca90 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ - 0x00d2caa0 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ - 0x00d2cab0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00d2cac0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d2cad0 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ - 0x00d2cae0 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ - 0x00d2caf0 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ - 0x00d2cb00 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ - 0x00d2cb10 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ - 0x00d2cb20 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ - 0x00d2cb30 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00d2cb40 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ - 0x00d2cb50 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ - 0x00d2cb60 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d2cb70 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d2cb80 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ - 0x00d2cb90 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ - 0x00d2cba0 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00d2cbb0 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00d2cbc0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00d2cbd0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d2cbe0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d2cbf0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d2cc00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2cc10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2cc20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2cc30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2cc40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2cc50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2cc60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2cc70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2cc80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2cc90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2cca0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2ccb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2ccc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2ccd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2cce0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2ccf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2cd00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2cd10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2cd20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2cd30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2cd40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2cd50 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d2cd60 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d2cd70 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d2cd80 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d2cd90 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d2cda0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d2cdb0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d2cdc0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d2cdd0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d2cde0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d2cdf0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d2ce00 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d2ce10 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d2ce20 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d2ce30 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d2ce40 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d2ce50 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d2ce60 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d2ce70 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d2ce80 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d2ce90 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d2cea0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d2ceb0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d2cec0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d2ced0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d2cee0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d2cef0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d2cf00 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d2cf10 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d2cf20 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d2cf30 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d2cf40 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d2cf50 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d2cf60 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d2cf70 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d2cf80 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d2cf90 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d2cfa0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d2cfb0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d2cfc0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d2cfd0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d2cfe0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d2cff0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d2d000 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d2d010 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d2d020 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d2d030 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d2d040 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d2d050 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d2d060 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d2d070 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2d080 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d2d090 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d2d0a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d2d0b0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d2d0c0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d2d0d0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d2d0e0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d2d0f0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d2d100 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d2d110 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d2d120 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d2d130 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d2d140 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d2d150 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d2d160 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d2d170 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d2d180 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d2d190 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d2d1a0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d2d1b0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d2d1c0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d2d1d0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d2d1e0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d2d1f0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d2d200 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d2d210 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d2d220 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d2d230 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d2d240 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d2d250 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d2d260 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d2d270 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d2d280 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d2d290 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d2d2a0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d2d2b0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d2d2c0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d2d2d0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d2d2e0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d2d2f0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d2d300 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d2d310 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d2d320 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d2d330 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d2d340 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d2d350 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d2d360 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d2d370 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d2d380 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d2d390 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d2d3a0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d2d3b0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d2d3c0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d2d3d0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d2d3e0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d2d3f0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d2d400 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d2d410 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d2d420 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d2d430 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d2d440 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d2d450 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00d2d460 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00d2d470 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d2d480 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ - 0x00d2d490 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ - 0x00d2d4a0 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ - 0x00d2d4b0 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ - 0x00d2d4c0 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ - 0x00d2d4d0 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ - 0x00d2d4e0 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ - 0x00d2d4f0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00d2d500 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ - 0x00d2d510 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00d2d520 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ - 0x00d2d530 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ - 0x00d2d540 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ - 0x00d2d550 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ - 0x00d2d560 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ - 0x00d2d570 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ - 0x00d2d580 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ - 0x00d2d590 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d2d5a0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00d2d5b0 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ - 0x00d2d5c0 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ - 0x00d2d5d0 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d2d5e0 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ - 0x00d2d5f0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d2d600 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ - 0x00d2d610 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00d2d620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2d630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2d640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2d650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2d660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2d670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2d680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2d690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2d6a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2d6b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2d6c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2d6d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2d6e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2d6f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2d700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2d710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2d720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2d730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2d740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2d750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2d760 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2d770 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00d2d780 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00d2d790 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00d2d7a0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00d2d7b0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00d2d7c0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d2d7d0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d2d7e0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d2d7f0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d2d800 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d2d810 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d2d820 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00d2d830 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d2d840 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00d2d850 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d2d860 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00d2d870 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00d2d880 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00d2d890 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d2d8a0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00d2d8b0 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00d2d8c0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d2d8d0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d2d8e0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d2d8f0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d2d900 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d2d910 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d2d920 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d2d930 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d2d940 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d2d950 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d2d960 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d2d970 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d2d980 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d2d990 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d2d9a0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d2d9b0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d2d9c0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d2d9d0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d2d9e0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d2d9f0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d2da00 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d2da10 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d2da20 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d2da30 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d2da40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d2da50 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d2da60 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d2da70 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2da80 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d2da90 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d2daa0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d2dab0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d2dac0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d2dad0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d2dae0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d2daf0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d2db00 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d2db10 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d2db20 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d2db30 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d2db40 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d2db50 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d2db60 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d2db70 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d2db80 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d2db90 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d2dba0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d2dbb0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d2dbc0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d2dbd0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d2dbe0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d2dbf0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d2dc00 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d2dc10 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d2dc20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2dc30 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d2dc40 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d2dc50 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d2dc60 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d2dc70 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d2dc80 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d2dc90 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d2dca0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d2dcb0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d2dcc0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d2dcd0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d2dce0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d2dcf0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d2dd00 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d2dd10 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d2dd20 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d2dd30 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d2dd40 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d2dd50 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d2dd60 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d2dd70 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d2dd80 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d2dd90 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d2dda0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d2ddb0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d2ddc0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d2ddd0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d2dde0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d2ddf0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d2de00 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d2de10 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d2de20 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d2de30 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d2de40 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d2de50 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d2de60 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d2de70 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00d2de80 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00d2de90 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00d2dea0 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ - 0x00d2deb0 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ - 0x00d2dec0 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ - 0x00d2ded0 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ - 0x00d2dee0 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ - 0x00d2def0 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ - 0x00d2df00 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00d2df10 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00d2df20 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d2df30 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ - 0x00d2df40 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ - 0x00d2df50 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00d2df60 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ - 0x00d2df70 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ - 0x00d2df80 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00d2df90 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00d2dfa0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2dfb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2dfc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2dfd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2dfe0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2dff0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2e000 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2e010 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2e020 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2e030 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2e040 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2e050 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2e060 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2e070 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2e080 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2e090 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2e0a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2e0b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2e0c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2e0d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2e0e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2e0f0 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ - 0x00d2e100 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d2e110 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d2e120 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d2e130 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d2e140 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d2e150 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d2e160 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d2e170 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d2e180 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d2e190 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00d2e1a0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d2e1b0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d2e1c0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d2e1d0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00d2e1e0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00d2e1f0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00d2e200 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00d2e210 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00d2e220 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00d2e230 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00d2e240 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00d2e250 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00d2e260 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00d2e270 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00d2e280 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00d2e290 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00d2e2a0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00d2e2b0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00d2e2c0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d2e2d0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00d2e2e0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00d2e2f0 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ - 0x00d2e300 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ - 0x00d2e310 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ - 0x00d2e320 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ - 0x00d2e330 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ - 0x00d2e340 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ - 0x00d2e350 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ - 0x00d2e360 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d2e370 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d2e380 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d2e390 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ - 0x00d2e3a0 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ - 0x00d2e3b0 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ - 0x00d2e3c0 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ - 0x00d2e3d0 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ - 0x00d2e3e0 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ - 0x00d2e3f0 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ - 0x00d2e400 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ - 0x00d2e410 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ - 0x00d2e420 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ - 0x00d2e430 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ - 0x00d2e440 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ - 0x00d2e450 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ - 0x00d2e460 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ - 0x00d2e470 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ - 0x00d2e480 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ - 0x00d2e490 76656334 206d6169 6e4f7574 6c696e65 vec4 mainOutline │ │ │ │ - 0x00d2e4a0 436f6c6f 72203d20 6d697828 755f6f75 Color = mix(u_ou │ │ │ │ - 0x00d2e4b0 746c696e 65436f6c 6f722c20 755f6661 tlineColor, u_fa │ │ │ │ - 0x00d2e4c0 6b654f75 746c696e 65436f6c 6f722c20 keOutlineColor, │ │ │ │ - 0x00d2e4d0 636f6566 732e7829 3b200a20 2020206d coefs.x); . m │ │ │ │ - 0x00d2e4e0 61696e4f 75746c69 6e65436f 6c6f7220 ainOutlineColor │ │ │ │ - 0x00d2e4f0 3d206d69 78286d61 696e4f75 746c696e = mix(mainOutlin │ │ │ │ - 0x00d2e500 65436f6c 6f722c20 755f6661 6b654f75 eColor, u_fakeOu │ │ │ │ - 0x00d2e510 746c696e 65436f6c 6f722c20 636f6566 tlineColor, coef │ │ │ │ - 0x00d2e520 732e7929 3b200a20 20202076 65633420 s.y); . vec4 │ │ │ │ - 0x00d2e530 636f6c6f 72203d20 6d697828 6d697828 color = mix(mix( │ │ │ │ - 0x00d2e540 6d61696e 436f6c6f 722c2076 65633428 mainColor, vec4( │ │ │ │ - 0x00d2e550 765f636f 6c6f722e 7267622c 20312e30 v_color.rgb, 1.0 │ │ │ │ - 0x00d2e560 292c2076 5f636f6c 6f722e61 292c206d ), v_color.a), m │ │ │ │ - 0x00d2e570 61696e43 6f6c6f72 2c207374 65702875 ainColor, step(u │ │ │ │ - 0x00d2e580 5f726f75 74655061 72616d73 2e772c20 _routeParams.w, │ │ │ │ - 0x00d2e590 302e3029 293b200a 20202020 636f6c6f 0.0)); . colo │ │ │ │ - 0x00d2e5a0 72203d20 6d697828 636f6c6f 722c206d r = mix(color, m │ │ │ │ - 0x00d2e5b0 61696e4f 75746c69 6e65436f 6c6f722c ainOutlineColor, │ │ │ │ - 0x00d2e5c0 20737465 70286b4f 75746c69 6e655468 step(kOutlineTh │ │ │ │ - 0x00d2e5d0 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ - 0x00d2e5e0 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ - 0x00d2e5f0 2020636f 6c6f7220 3d206d69 7828636f color = mix(co │ │ │ │ - 0x00d2e600 6c6f722c 206d6169 6e4f7574 6c696e65 lor, mainOutline │ │ │ │ - 0x00d2e610 436f6c6f 722c2073 6d6f6f74 68737465 Color, smoothste │ │ │ │ - 0x00d2e620 70286b4f 75746c69 6e655468 72657368 p(kOutlineThresh │ │ │ │ - 0x00d2e630 6f6c6432 2c206b4f 75746c69 6e655468 old2, kOutlineTh │ │ │ │ - 0x00d2e640 72657368 6f6c6431 2c206162 7328765f reshold1, abs(v_ │ │ │ │ - 0x00d2e650 6c656e67 74682e79 2929293b 200a2020 length.y))); . │ │ │ │ - 0x00d2e660 2020636f 6c6f722e 61202a3d 2028312e color.a *= (1. │ │ │ │ - 0x00d2e670 30202d20 736d6f6f 74687374 6570286b 0 - smoothstep(k │ │ │ │ - 0x00d2e680 416e7469 616c6961 73696e67 54687265 AntialiasingThre │ │ │ │ - 0x00d2e690 73686f6c 642c2031 2e302c20 61627328 shold, 1.0, abs( │ │ │ │ - 0x00d2e6a0 765f6c65 6e677468 2e792929 293b200a v_length.y))); . │ │ │ │ - 0x00d2e6b0 20202020 636f6c6f 72203d20 76656334 color = vec4 │ │ │ │ - 0x00d2e6c0 286d6978 28636f6c 6f722e72 67622c20 (mix(color.rgb, │ │ │ │ - 0x00d2e6d0 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ - 0x00d2e6e0 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ - 0x00d2e6f0 20636f6c 6f722e61 293b200a 20202020 color.a); . │ │ │ │ - 0x00d2e700 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ - 0x00d2e710 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ - 0x00d2e720 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2e730 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2e740 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2e750 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2e760 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2e770 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2e780 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2e790 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2e7a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2e7b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2e7c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2e7d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2e7e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2e7f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2e800 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2e810 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2e820 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2e830 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2e840 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2e850 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2e860 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2e870 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d2e880 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d2e890 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ - 0x00d2e8a0 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ - 0x00d2e8b0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d2e8c0 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ - 0x00d2e8d0 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ - 0x00d2e8e0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00d2e8f0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d2e900 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d2e910 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d2e920 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d2e930 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d2e940 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d2e950 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ - 0x00d2e960 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ - 0x00d2e970 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ - 0x00d2e980 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ - 0x00d2e990 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ - 0x00d2e9a0 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ - 0x00d2e9b0 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ - 0x00d2e9c0 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ - 0x00d2e9d0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d2e9e0 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ - 0x00d2e9f0 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ - 0x00d2ea00 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ - 0x00d2ea10 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ - 0x00d2ea20 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ - 0x00d2ea30 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ - 0x00d2ea40 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ - 0x00d2ea50 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ - 0x00d2ea60 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ - 0x00d2ea70 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ - 0x00d2ea80 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d2ea90 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00d2eaa0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d2eab0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d2eac0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d2ead0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d2eae0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d2eaf0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d2eb00 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d2eb10 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d2eb20 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d2eb30 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d2eb40 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d2eb50 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d2eb60 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d2eb70 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d2eb80 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d2eb90 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d2eba0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d2ebb0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d2ebc0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d2ebd0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d2ebe0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d2ebf0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d2ec00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d2ec10 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d2ec20 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d2ec30 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d2ec40 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d2ec50 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d2ec60 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d2ec70 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d2ec80 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d2ec90 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d2eca0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d2ecb0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d2ecc0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d2ecd0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d2ece0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d2ecf0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d2ed00 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d2ed10 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d2ed20 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d2ed30 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d2ed40 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d2ed50 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d2ed60 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d2ed70 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d2ed80 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d2ed90 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d2eda0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d2edb0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d2edc0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d2edd0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d2ede0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d2edf0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d2ee00 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d2ee10 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d2ee20 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d2ee30 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d2ee40 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d2ee50 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d2ee60 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d2ee70 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d2ee80 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d2ee90 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d2eea0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d2eeb0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d2eec0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d2eed0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d2eee0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d2eef0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d2ef00 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d2ef10 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d2ef20 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d2ef30 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d2ef40 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d2ef50 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d2ef60 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d2ef70 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d2ef80 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d2ef90 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d2efa0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d2efb0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d2efc0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d2efd0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d2efe0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d2eff0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d2f000 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d2f010 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d2f020 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d2f030 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00d2f040 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00d2f050 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00d2f060 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00d2f070 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00d2f080 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ - 0x00d2f090 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00d2f0a0 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ - 0x00d2f0b0 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ - 0x00d2f0c0 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ - 0x00d2f0d0 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ - 0x00d2f0e0 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ - 0x00d2f0f0 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ - 0x00d2f100 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ - 0x00d2f110 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ - 0x00d2f120 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ - 0x00d2f130 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d2f140 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ - 0x00d2f150 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ - 0x00d2f160 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ - 0x00d2f170 0a202020 20202020 20202020 20202020 . │ │ │ │ - 0x00d2f180 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d2f190 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d2f1a0 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ - 0x00d2f1b0 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ - 0x00d2f1c0 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ - 0x00d2f1d0 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ - 0x00d2f1e0 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ - 0x00d2f1f0 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ - 0x00d2f200 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ - 0x00d2f210 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ - 0x00d2f220 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ - 0x00d2f230 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ - 0x00d2f240 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ - 0x00d2f250 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ - 0x00d2f260 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ - 0x00d2f270 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00d2f280 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00d2f290 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ - 0x00d2f2a0 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ - 0x00d2f2b0 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ - 0x00d2f2c0 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ - 0x00d2f2d0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00d2f2e0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d2f2f0 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ - 0x00d2f300 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00d2f310 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00d2f320 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2f330 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2f340 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2f350 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2f360 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2f370 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2f380 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2f390 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2f3a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2f3b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2f3c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2f3d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2f3e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2f3f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2f400 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2f410 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2f420 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2f430 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2f440 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2f450 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2f460 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2f470 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d2f480 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d2f490 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d2f4a0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d2f4b0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d2f4c0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d2f4d0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d2f4e0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d2f4f0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d2f500 69666f72 6d207665 63342075 5f726f75 iform vec4 u_rou │ │ │ │ - 0x00d2f510 74655061 72616d73 3b200a20 20756e69 teParams; . uni │ │ │ │ - 0x00d2f520 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ - 0x00d2f530 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d2f540 63342075 5f6d6173 6b436f6c 6f723b20 c4 u_maskColor; │ │ │ │ - 0x00d2f550 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d2f560 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00d2f570 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d2f580 755f6661 6b65436f 6c6f723b 200a2020 u_fakeColor; . │ │ │ │ - 0x00d2f590 756e6966 6f726d20 76656334 20755f66 uniform vec4 u_f │ │ │ │ - 0x00d2f5a0 616b654f 75746c69 6e65436f 6c6f723b akeOutlineColor; │ │ │ │ - 0x00d2f5b0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d2f5c0 20755f66 616b6542 6f726465 72733b20 u_fakeBorders; │ │ │ │ - 0x00d2f5d0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d2f5e0 755f7061 74746572 6e3b200a 2020756e u_pattern; . un │ │ │ │ - 0x00d2f5f0 69666f72 6d207665 63322075 5f616e67 iform vec2 u_ang │ │ │ │ - 0x00d2f600 6c65436f 7353696e 3b200a20 20756e69 leCosSin; . uni │ │ │ │ - 0x00d2f610 666f726d 20666c6f 61742075 5f617272 form float u_arr │ │ │ │ - 0x00d2f620 6f774861 6c665769 6474683b 200a2020 owHalfWidth; . │ │ │ │ - 0x00d2f630 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d2f640 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d2f650 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00d2f660 636f6c6f 72546578 3b200a20 20636f6e colorTex; . con │ │ │ │ - 0x00d2f670 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d2f680 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d2f690 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d2f6a0 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ - 0x00d2f6b0 63342066 696e616c 436f6c6f 72203d20 c4 finalColor = │ │ │ │ - 0x00d2f6c0 74657874 75726528 755f636f 6c6f7254 texture(u_colorT │ │ │ │ - 0x00d2f6d0 65782c20 765f636f 6c6f7254 6578436f ex, v_colorTexCo │ │ │ │ - 0x00d2f6e0 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ - 0x00d2f6f0 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ - 0x00d2f700 61636974 793b200a 20202020 69662028 acity; . if ( │ │ │ │ - 0x00d2f710 66696e61 6c436f6c 6f722e61 203c2030 finalColor.a < 0 │ │ │ │ - 0x00d2f720 2e303129 200a2020 20202020 64697363 .01) . disc │ │ │ │ - 0x00d2f730 6172643b 200a2020 20206669 6e616c43 ard; . finalC │ │ │ │ - 0x00d2f740 6f6c6f72 203d2076 65633428 6d697828 olor = vec4(mix( │ │ │ │ - 0x00d2f750 66696e61 6c436f6c 6f722e72 67622c20 finalColor.rgb, │ │ │ │ - 0x00d2f760 755f6d61 736b436f 6c6f722e 7267622c u_maskColor.rgb, │ │ │ │ - 0x00d2f770 20755f6d 61736b43 6f6c6f72 2e61292c u_maskColor.a), │ │ │ │ - 0x00d2f780 2066696e 616c436f 6c6f722e 61293b20 finalColor.a); │ │ │ │ - 0x00d2f790 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ - 0x00d2f7a0 203d2066 696e616c 436f6c6f 723b200a = finalColor; . │ │ │ │ - 0x00d2f7b0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00d2f7c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d2f7d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d2f7e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d2f7f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d2f800 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d2f810 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d2f820 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d2f830 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d2f840 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d2f850 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d2f860 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d2f870 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d2f880 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d2f890 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d2f8a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d2f8b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d2f8c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d2f8d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d2f8e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d2f8f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d2f900 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d2f910 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d2f920 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d2f930 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d2f940 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d2f950 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d2f960 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d2f970 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d2f980 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d2f990 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d2f9a0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d2f9b0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d2f9c0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d2f9d0 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ - 0x00d2f9e0 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ - 0x00d2f9f0 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ - 0x00d2fa00 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00d2fa10 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ - 0x00d2fa20 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d2fa30 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00d2fa40 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d2fa50 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ - 0x00d2fa60 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00d2fa70 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ - 0x00d2fa80 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d2fa90 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ - 0x00d2faa0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00d2fab0 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ - 0x00d2fac0 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ - 0x00d2fad0 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ - 0x00d2fae0 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ - 0x00d2faf0 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ - 0x00d2fb00 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d2fb10 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ - 0x00d2fb20 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d2fb30 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d2fb40 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d2fb50 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d2fb60 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d2fb70 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d2fb80 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d2fb90 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d2fba0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d2fbb0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d2fbc0 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d2fbd0 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d2fbe0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d2fbf0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d2fc00 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d2fc10 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d2fc20 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d2fc30 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d2fc40 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d2fc50 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d2fc60 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d2fc70 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d2fc80 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d2fc90 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d2fca0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d2fcb0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d2fcc0 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d2fcd0 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d2fce0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d2fcf0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d2fd00 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d2fd10 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d2fd20 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d2fd30 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d2fd40 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d2fd50 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d2fd60 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d2fd70 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d2fd80 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d2fd90 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d2fda0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d2fdb0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d2fdc0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d2fdd0 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d2fde0 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d2fdf0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d2fe00 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d2fe10 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d2fe20 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d2fe30 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d2fe40 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d2fe50 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d2fe60 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d2fe70 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d2fe80 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d2fe90 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d2fea0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d2feb0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d2fec0 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d2fed0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d2fee0 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d2fef0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d2ff00 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d2ff10 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d2ff20 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d2ff30 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d2ff40 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d2ff50 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d2ff60 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d2ff70 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d2ff80 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d2ff90 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d2ffa0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d2ffb0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d2ffc0 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d2ffd0 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d2ffe0 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d2fff0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d30000 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d30010 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d30020 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d30030 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d30040 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d30050 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d30060 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d30070 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d30080 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d30090 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d300a0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d300b0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00d300c0 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00d300d0 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00d300e0 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00d300f0 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00d30100 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00d30110 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ - 0x00d30120 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ - 0x00d30130 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ - 0x00d30140 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ - 0x00d30150 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ - 0x00d30160 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ - 0x00d30170 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00d30180 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ - 0x00d30190 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00d301a0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00d301b0 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ - 0x00d301c0 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ - 0x00d301d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d301e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d301f0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d30200 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ - 0x00d30210 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ - 0x00d30220 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ - 0x00d30230 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00d30240 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00d30250 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00d30260 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00d30270 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00d30280 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00d30290 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d302a0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d302b0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d302c0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d302d0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d302e0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d302f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d30300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d30310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d30320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d30330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d30340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d30350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d30360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d30370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d30380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d30390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d303a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d303b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d303c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d303d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d303e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d303f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d30400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d30410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d30420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d30430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d30440 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d30450 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ - 0x00d30460 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d30470 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d30480 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d30490 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d304a0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d304b0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d304c0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d304d0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d304e0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d304f0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00d30500 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d30510 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d30520 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d30530 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00d30540 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00d30550 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00d30560 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00d30570 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00d30580 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00d30590 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00d305a0 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00d305b0 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00d305c0 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00d305d0 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00d305e0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00d305f0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00d30600 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00d30610 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00d30620 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d30630 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00d30640 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00d30650 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ - 0x00d30660 323b200a 2020666c 6f617420 616c7068 2; . float alph │ │ │ │ - 0x00d30670 6146726f 6d506174 7465726e 28666c6f aFromPattern(flo │ │ │ │ - 0x00d30680 61742063 75724c65 6e2c2066 6c6f6174 at curLen, float │ │ │ │ - 0x00d30690 20646173 684c656e 2c20666c 6f617420 dashLen, float │ │ │ │ - 0x00d306a0 6761704c 656e2920 0a20207b 200a2020 gapLen) . { . │ │ │ │ - 0x00d306b0 2020666c 6f617420 6c656e20 3d206461 float len = da │ │ │ │ - 0x00d306c0 73684c65 6e202b20 6761704c 656e3b20 shLen + gapLen; │ │ │ │ - 0x00d306d0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ - 0x00d306e0 74203d20 66726163 74286375 724c656e t = fract(curLen │ │ │ │ - 0x00d306f0 202f206c 656e2920 2a206c65 6e3b200a / len) * len; . │ │ │ │ - 0x00d30700 20202020 72657475 726e2073 74657028 return step( │ │ │ │ - 0x00d30710 6f666673 65742c20 64617368 4c656e29 offset, dashLen) │ │ │ │ - 0x00d30720 3b200a20 207d200a 2020636f 6e737420 ; . } . const │ │ │ │ - 0x00d30730 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d30740 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d30750 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ - 0x00d30760 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ - 0x00d30770 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ - 0x00d30780 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ - 0x00d30790 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ - 0x00d307a0 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ - 0x00d307b0 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ - 0x00d307c0 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ - 0x00d307d0 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ - 0x00d307e0 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ - 0x00d307f0 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ - 0x00d30800 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ - 0x00d30810 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ - 0x00d30820 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ - 0x00d30830 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ - 0x00d30840 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ - 0x00d30850 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ - 0x00d30860 76656334 20636f6c 6f72203d 206d6169 vec4 color = mai │ │ │ │ - 0x00d30870 6e436f6c 6f72202b 20765f63 6f6c6f72 nColor + v_color │ │ │ │ - 0x00d30880 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ - 0x00d30890 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ - 0x00d308a0 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ - 0x00d308b0 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ - 0x00d308c0 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ - 0x00d308d0 2929202a 200a2020 20202020 20202020 )) * . │ │ │ │ - 0x00d308e0 20202020 2020616c 70686146 726f6d50 alphaFromP │ │ │ │ - 0x00d308f0 61747465 726e2876 5f6c656e 6774682e attern(v_length. │ │ │ │ - 0x00d30900 782c2075 5f706174 7465726e 2e782c20 x, u_pattern.x, │ │ │ │ - 0x00d30910 755f7061 74746572 6e2e7929 3b200a20 u_pattern.y); . │ │ │ │ - 0x00d30920 20202063 6f6c6f72 203d2076 65633428 color = vec4( │ │ │ │ - 0x00d30930 6d697828 636f6c6f 722e7267 622c2075 mix(color.rgb, u │ │ │ │ - 0x00d30940 5f6d6173 6b436f6c 6f722e72 67622c20 _maskColor.rgb, │ │ │ │ - 0x00d30950 755f6d61 736b436f 6c6f722e 61292c20 u_maskColor.a), │ │ │ │ - 0x00d30960 636f6c6f 722e6129 3b200a20 20202076 color.a); . v │ │ │ │ - 0x00d30970 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ - 0x00d30980 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d30990 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d309a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d309b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d309c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d309d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d309e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d309f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d30a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d30a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d30a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d30a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d30a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d30a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d30a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d30a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d30a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d30a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d30aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d30ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d30ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d30ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d30ae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d30af0 63342076 5f726164 6975733b 200a2020 c4 v_radius; . │ │ │ │ - 0x00d30b00 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d30b10 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d30b20 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00d30b30 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d30b40 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d30b50 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d30b60 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d30b70 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d30b80 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d30b90 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00d30ba0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d30bb0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00d30bc0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d30bd0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00d30be0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00d30bf0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00d30c00 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00d30c10 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00d30c20 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00d30c30 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00d30c40 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00d30c50 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00d30c60 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00d30c70 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00d30c80 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00d30c90 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00d30ca0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00d30cb0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00d30cc0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d30cd0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00d30ce0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00d30cf0 67506978 656c7343 6f756e74 203d2032 gPixelsCount = 2 │ │ │ │ - 0x00d30d00 2e353b20 0a202063 6f6e7374 20666c6f .5; . const flo │ │ │ │ - 0x00d30d10 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d30d20 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d30d30 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ - 0x00d30d40 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ - 0x00d30d50 616c436f 6c6f7220 3d20765f 636f6c6f alColor = v_colo │ │ │ │ - 0x00d30d60 723b200a 20202020 666c6f61 74206161 r; . float aa │ │ │ │ - 0x00d30d70 52616469 7573203d 206d6178 28765f72 Radius = max(v_r │ │ │ │ - 0x00d30d80 61646975 732e7a20 2d206b41 6e746961 adius.z - kAntia │ │ │ │ - 0x00d30d90 6c696173 696e6750 6978656c 73436f75 liasingPixelsCou │ │ │ │ - 0x00d30da0 6e742c20 302e3029 3b200a20 20202066 nt, 0.0); . f │ │ │ │ - 0x00d30db0 6c6f6174 20737465 7056616c 7565203d loat stepValue = │ │ │ │ - 0x00d30dc0 20736d6f 6f746873 74657028 61615261 smoothstep(aaRa │ │ │ │ - 0x00d30dd0 64697573 202a2061 61526164 6975732c dius * aaRadius, │ │ │ │ - 0x00d30de0 20765f72 61646975 732e7a20 2a20765f v_radius.z * v_ │ │ │ │ - 0x00d30df0 72616469 75732e7a 2c200a20 20202020 radius.z, . │ │ │ │ - 0x00d30e00 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d30e10 20202020 20202020 20202020 646f7428 dot( │ │ │ │ - 0x00d30e20 765f7261 64697573 2e78792c 20765f72 v_radius.xy, v_r │ │ │ │ - 0x00d30e30 61646975 732e7879 29293b20 0a202020 adius.xy)); . │ │ │ │ - 0x00d30e40 2066696e 616c436f 6c6f722e 61203d20 finalColor.a = │ │ │ │ - 0x00d30e50 66696e61 6c436f6c 6f722e61 202a2075 finalColor.a * u │ │ │ │ - 0x00d30e60 5f6f7061 63697479 202a2028 312e3020 _opacity * (1.0 │ │ │ │ - 0x00d30e70 2d207374 65705661 6c756529 3b200a20 - stepValue); . │ │ │ │ - 0x00d30e80 20202069 66202866 696e616c 436f6c6f if (finalColo │ │ │ │ - 0x00d30e90 722e6120 3c20302e 3031207c 7c20755f r.a < 0.01 || u_ │ │ │ │ - 0x00d30ea0 726f7574 65506172 616d732e 79203e20 routeParams.y > │ │ │ │ - 0x00d30eb0 765f7261 64697573 2e772920 0a202020 v_radius.w) . │ │ │ │ - 0x00d30ec0 20202064 69736361 72643b20 0a202020 discard; . │ │ │ │ - 0x00d30ed0 2066696e 616c436f 6c6f7220 3d207665 finalColor = ve │ │ │ │ - 0x00d30ee0 6334286d 69782866 696e616c 436f6c6f c4(mix(finalColo │ │ │ │ - 0x00d30ef0 722e7267 622c2075 5f6d6173 6b436f6c r.rgb, u_maskCol │ │ │ │ - 0x00d30f00 6f722e72 67622c20 755f6d61 736b436f or.rgb, u_maskCo │ │ │ │ - 0x00d30f10 6c6f722e 61292c20 66696e61 6c436f6c lor.a), finalCol │ │ │ │ - 0x00d30f20 6f722e61 293b200a 20202020 765f4672 or.a); . v_Fr │ │ │ │ - 0x00d30f30 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d30f40 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d30f50 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d30f60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d30f70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d30f80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d30f90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d30fa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d30fb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d30fc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d30fd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d30fe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d30ff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d31000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d31010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d31020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d31030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d31040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d31050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d31060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d31070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d31080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d31090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d310a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d310b0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d310c0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d310d0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d310e0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d310f0 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ - 0x00d31100 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00d31110 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00d31120 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d31130 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d31140 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d31150 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d31160 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d31170 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d31180 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ - 0x00d31190 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d311a0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00d311b0 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ - 0x00d311c0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d311d0 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ - 0x00d311e0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d311f0 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ - 0x00d31200 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d31210 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ - 0x00d31220 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d31230 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ - 0x00d31240 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ - 0x00d31250 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ - 0x00d31260 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d31270 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ - 0x00d31280 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d31290 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ - 0x00d312a0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d312b0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00d312c0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d312d0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d312e0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d312f0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d31300 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d31310 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d31320 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d31330 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d31340 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d31350 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d31360 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d31370 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d31380 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d31390 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d313a0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d313b0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d313c0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d313d0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d313e0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d313f0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d31400 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d31410 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d31420 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d31430 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d31440 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d31450 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d31460 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d31470 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d31480 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d31490 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d314a0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d314b0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d314c0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d314d0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d314e0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d314f0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d31500 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d31510 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d31520 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d31530 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d31540 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d31550 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d31560 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d31570 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d31580 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d31590 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d315a0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d315b0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d315c0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d315d0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d315e0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d315f0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d31600 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d31610 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d31620 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d31630 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d31640 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d31650 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d31660 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d31670 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d31680 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d31690 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d316a0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d316b0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d316c0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d316d0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d316e0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d316f0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d31700 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d31710 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d31720 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d31730 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d31740 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d31750 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d31760 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d31770 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d31780 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d31790 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d317a0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d317b0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d317c0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d317d0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d317e0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d317f0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d31800 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d31810 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d31820 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d31830 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d31840 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d31850 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d31860 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ - 0x00d31870 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ - 0x00d31880 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00d31890 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ - 0x00d318a0 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ - 0x00d318b0 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ - 0x00d318c0 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ - 0x00d318d0 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ - 0x00d318e0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d318f0 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ - 0x00d31900 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ - 0x00d31910 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ - 0x00d31920 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ - 0x00d31930 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ - 0x00d31940 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ - 0x00d31950 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ - 0x00d31960 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ - 0x00d31970 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00d31980 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ - 0x00d31990 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ - 0x00d319a0 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ - 0x00d319b0 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ - 0x00d319c0 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ - 0x00d319d0 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ - 0x00d319e0 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ - 0x00d319f0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00d31a00 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00d31a10 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00d31a20 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00d31a30 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00d31a40 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d31a50 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ - 0x00d31a60 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ - 0x00d31a70 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ - 0x00d31a80 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d31a90 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d31aa0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d31ab0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d31ac0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d31ad0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d31ae0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d31af0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d31b00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d31b10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d31b20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d31b30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d31b40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d31b50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d31b60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d31b70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d31b80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d31b90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d31ba0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d31bb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d31bc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d31bd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d31be0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d31bf0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d31c00 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d31c10 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d31c20 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d31c30 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d31c40 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d31c50 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d31c60 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ - 0x00d31c70 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ - 0x00d31c80 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ - 0x00d31c90 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d31ca0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d31cb0 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ - 0x00d31cc0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d31cd0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d31ce0 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ - 0x00d31cf0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00d31d00 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ - 0x00d31d10 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d31d20 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d31d30 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ - 0x00d31d40 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d31d50 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ - 0x00d31d60 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ - 0x00d31d70 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ - 0x00d31d80 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ - 0x00d31d90 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ - 0x00d31da0 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ - 0x00d31db0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d31dc0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d31dd0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d31de0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d31df0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d31e00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d31e10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d31e20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d31e30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d31e40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d31e50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d31e60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d31e70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d31e80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d31e90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d31ea0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d31eb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d31ec0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d31ed0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d31ee0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d31ef0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d31f00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d31f10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d31f20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d31f30 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d31f40 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d31f50 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d31f60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d31f70 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d31f80 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d31f90 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d31fa0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d31fb0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d31fc0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d31fd0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00d31fe0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00d31ff0 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ - 0x00d32000 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00d32010 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00d32020 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ - 0x00d32030 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d32040 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ - 0x00d32050 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ - 0x00d32060 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d32070 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d32080 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00d32090 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00d320a0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d320b0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d320c0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d320d0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00d320e0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d320f0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d32100 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00d32110 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d32120 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00d32130 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00d32140 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00d32150 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00d32160 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00d32170 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00d32180 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d32190 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00d321a0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d321b0 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00d321c0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00d321d0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00d321e0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00d321f0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00d32200 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00d32210 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d32220 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00d32230 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00d32240 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d32250 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00d32260 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00d32270 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00d32280 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00d32290 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d322a0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d322b0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d322c0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00d322d0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00d322e0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00d322f0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00d32300 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d32310 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d32320 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d32330 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00d32340 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00d32350 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00d32360 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00d32370 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00d32380 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00d32390 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00d323a0 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00d323b0 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00d323c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d323d0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00d323e0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00d323f0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00d32400 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00d32410 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d32420 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00d32430 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00d32440 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00d32450 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00d32460 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00d32470 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d32480 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00d32490 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00d324a0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d324b0 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00d324c0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d324d0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00d324e0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00d324f0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00d32500 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00d32510 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00d32520 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00d32530 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00d32540 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00d32550 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00d32560 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00d32570 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00d32580 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00d32590 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00d325a0 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00d325b0 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00d325c0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00d325d0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d325e0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00d325f0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00d32600 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00d32610 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00d32620 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ - 0x00d32630 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ - 0x00d32640 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ - 0x00d32650 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ - 0x00d32660 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d32670 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00d32680 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00d32690 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d326a0 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00d326b0 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ - 0x00d326c0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00d326d0 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ - 0x00d326e0 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ - 0x00d326f0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d32700 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00d32710 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d32720 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d32730 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d32740 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d32750 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d32760 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d32770 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d32780 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d32790 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d327a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d327b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d327c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d327d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d327e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d327f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d32800 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d32810 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d32820 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d32830 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d32840 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d32850 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d32860 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d32870 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d32880 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d32890 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d328a0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d328b0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00d328c0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00d328d0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ - 0x00d328e0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d328f0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d32900 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d32910 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d32920 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ - 0x00d32930 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00d32940 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ - 0x00d32950 6f6f7264 73293b20 0a202020 2066696e oords); . fin │ │ │ │ - 0x00d32960 616c436f 6c6f722e 61202a3d 20755f6f alColor.a *= u_o │ │ │ │ - 0x00d32970 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ - 0x00d32980 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ - 0x00d32990 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ - 0x00d329a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d329b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d329c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d329d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d329e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d329f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d32a00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d32a10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d32a20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d32a30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d32a40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d32a50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d32a60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d32a70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d32a80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d32a90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d32aa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d32ab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d32ac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d32ad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d32ae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d32af0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d32b00 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d32b10 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d32b20 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d32b30 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d32b40 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d32b50 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ - 0x00d32b60 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d32b70 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d32b80 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d32b90 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d32ba0 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ - 0x00d32bb0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d32bc0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ - 0x00d32bd0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ - 0x00d32be0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d32bf0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d32c00 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ - 0x00d32c10 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d32c20 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d32c30 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ - 0x00d32c40 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ - 0x00d32c50 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d32c60 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ - 0x00d32c70 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ - 0x00d32c80 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ - 0x00d32c90 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ - 0x00d32ca0 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ - 0x00d32cb0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d32cc0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ - 0x00d32cd0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ - 0x00d32ce0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d32cf0 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ - 0x00d32d00 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ - 0x00d32d10 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d32d20 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ - 0x00d32d30 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ - 0x00d32d40 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ - 0x00d32d50 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ - 0x00d32d60 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d32d70 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d32d80 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d32d90 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ - 0x00d32da0 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ - 0x00d32db0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ - 0x00d32dc0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ - 0x00d32dd0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d32de0 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ - 0x00d32df0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d32e00 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ - 0x00d32e10 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ - 0x00d32e20 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ - 0x00d32e30 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ - 0x00d32e40 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ - 0x00d32e50 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ - 0x00d32e60 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ - 0x00d32e70 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ - 0x00d32e80 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ - 0x00d32e90 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d32ea0 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ - 0x00d32eb0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ - 0x00d32ec0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ - 0x00d32ed0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00d32ee0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d32ef0 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ - 0x00d32f00 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ - 0x00d32f10 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ - 0x00d32f20 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ - 0x00d32f30 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ - 0x00d32f40 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d32f50 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ - 0x00d32f60 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ - 0x00d32f70 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00d32f80 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ - 0x00d32f90 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ - 0x00d32fa0 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ - 0x00d32fb0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ - 0x00d32fc0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ - 0x00d32fd0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d32fe0 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ - 0x00d32ff0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00d33000 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ - 0x00d33010 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ - 0x00d33020 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ - 0x00d33030 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ - 0x00d33040 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ - 0x00d33050 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d33060 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ - 0x00d33070 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ - 0x00d33080 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ - 0x00d33090 7365200a 20202020 20207265 7475726e se . return │ │ │ │ - 0x00d330a0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d330b0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00d330c0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00d330d0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d330e0 203d2061 5f74636f 6f72643b 200a2020 = a_tcoord; . │ │ │ │ - 0x00d330f0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d33100 76656334 28615f70 6f732c20 302e302c vec4(a_pos, 0.0, │ │ │ │ - 0x00d33110 20312e30 293b200a 20207d20 0a000000 1.0); . } .... │ │ │ │ - 0x00d33120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d33130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d33140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d33150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d33160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d33170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d33180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d33190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d331a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d331b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d331c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d331d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d331e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d331f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d33200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d33210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d33220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d33230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d33240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d33250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d33260 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d33270 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d33280 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d33290 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d332a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d332b0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d332c0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d332d0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d332e0 23656e64 6966200a 2020696e 20666c6f #endif . in flo │ │ │ │ - 0x00d332f0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ - 0x00d33300 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ - 0x00d33310 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d33320 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d33330 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d33340 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d33350 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d33360 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d33370 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d33380 65633420 755f706f 73697469 6f6e3b20 ec4 u_position; │ │ │ │ - 0x00d33390 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00d333a0 755f6c69 6e655061 72616d73 3b200a20 u_lineParams; . │ │ │ │ - 0x00d333b0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d333c0 5f616363 75726163 793b200a 2020756e _accuracy; . un │ │ │ │ - 0x00d333d0 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00d333e0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00d333f0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00d33400 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d33410 61742075 5f617a69 6d75743b 200a2020 at u_azimut; . │ │ │ │ - 0x00d33420 636f6e73 7420666c 6f617420 6b416e74 const float kAnt │ │ │ │ - 0x00d33430 69616c69 6173696e 67546872 6573686f ialiasingThresho │ │ │ │ - 0x00d33440 6c64203d 20302e39 323b200a 2020636f ld = 0.92; . co │ │ │ │ - 0x00d33450 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d33460 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d33470 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d33480 696e2829 200a2020 7b200a20 20236966 in() . { . #if │ │ │ │ - 0x00d33490 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ - 0x00d334a0 20202020 4c4f575f 50207665 63342063 LOW_P vec4 c │ │ │ │ - 0x00d334b0 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ - 0x00d334c0 0a202023 656c7365 200a2020 20204c4f . #else . LO │ │ │ │ - 0x00d334d0 575f5020 76656334 20636f6c 6f72203d W_P vec4 color = │ │ │ │ - 0x00d334e0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00d334f0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ - 0x00d33500 6f6f7264 293b200a 20202365 6e646966 oord); . #endif │ │ │ │ - 0x00d33510 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ - 0x00d33520 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ - 0x00d33530 20636f6c 6f722e61 202a3d20 28312e30 color.a *= (1.0 │ │ │ │ - 0x00d33540 202d2073 6d6f6f74 68737465 70286b41 - smoothstep(kA │ │ │ │ - 0x00d33550 6e746961 6c696173 696e6754 68726573 ntialiasingThres │ │ │ │ - 0x00d33560 686f6c64 2c20312e 302c2061 62732876 hold, 1.0, abs(v │ │ │ │ - 0x00d33570 5f6c656e 67746859 2929293b 200a2020 _lengthY))); . │ │ │ │ - 0x00d33580 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d33590 636f6c6f 723b200a 20207d20 0a000000 color; . } .... │ │ │ │ - 0x00d335a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d335b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d335c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d335d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d335e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d335f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d33600 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d33610 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d33620 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d33630 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d33640 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d33650 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d33660 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d33670 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d33680 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d33690 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d336a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d336b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d336c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d336d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d336e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d336f0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d33700 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d33710 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d33720 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d33730 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ - 0x00d33740 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ - 0x00d33750 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ - 0x00d33760 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ - 0x00d33770 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ - 0x00d33780 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d33790 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ - 0x00d337a0 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ - 0x00d337b0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ - 0x00d337c0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d337d0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d337e0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d337f0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d33800 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d33810 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d33820 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ - 0x00d33830 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00d33840 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ - 0x00d33850 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ - 0x00d33860 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ - 0x00d33870 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d33880 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d33890 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d338a0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d338b0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ - 0x00d338c0 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ - 0x00d338d0 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ - 0x00d338e0 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00d338f0 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ - 0x00d33900 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ - 0x00d33910 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ - 0x00d33920 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ - 0x00d33930 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d33940 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d33950 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d33960 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00d33970 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00d33980 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00d33990 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00d339a0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00d339b0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d339c0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d339d0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00d339e0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00d339f0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00d33a00 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d33a10 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00d33a20 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00d33a30 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00d33a40 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00d33a50 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00d33a60 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00d33a70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d33a80 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00d33a90 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00d33aa0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d33ab0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00d33ac0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00d33ad0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d33ae0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00d33af0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00d33b00 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00d33b10 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d33b20 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00d33b30 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00d33b40 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00d33b50 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d33b60 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d33b70 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d33b80 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d33b90 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00d33ba0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00d33bb0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00d33bc0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00d33bd0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00d33be0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d33bf0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d33c00 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00d33c10 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00d33c20 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00d33c30 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00d33c40 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00d33c50 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00d33c60 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d33c70 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00d33c80 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d33c90 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00d33ca0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00d33cb0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00d33cc0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00d33cd0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00d33ce0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d33cf0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00d33d00 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00d33d10 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00d33d20 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00d33d30 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00d33d40 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d33d50 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00d33d60 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00d33d70 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00d33d80 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00d33d90 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00d33da0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00d33db0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00d33dc0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00d33dd0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00d33de0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00d33df0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00d33e00 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00d33e10 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00d33e20 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00d33e30 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00d33e40 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00d33e50 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00d33e60 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d33e70 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00d33e80 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00d33e90 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00d33ea0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d33eb0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00d33ec0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d33ed0 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00d33ee0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00d33ef0 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00d33f00 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00d33f10 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00d33f20 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ - 0x00d33f30 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ - 0x00d33f40 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ - 0x00d33f50 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ - 0x00d33f60 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ - 0x00d33f70 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00d33f80 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00d33f90 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ - 0x00d33fa0 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ - 0x00d33fb0 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ - 0x00d33fc0 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ - 0x00d33fd0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d33fe0 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ - 0x00d33ff0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00d34000 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ + 0x00d2c4e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d2c4f0 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00d2c500 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d2c510 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00d2c520 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00d2c530 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d2c540 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d2c550 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00d2c560 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00d2c570 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d2c580 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00d2c590 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00d2c5a0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d2c5b0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00d2c5c0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00d2c5d0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00d2c5e0 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00d2c5f0 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00d2c600 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d2c610 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d2c620 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d2c630 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00d2c640 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00d2c650 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00d2c660 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00d2c670 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00d2c680 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d2c690 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00d2c6a0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00d2c6b0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d2c6c0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00d2c6d0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00d2c6e0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d2c6f0 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00d2c700 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00d2c710 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00d2c720 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d2c730 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00d2c740 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00d2c750 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00d2c760 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00d2c770 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00d2c780 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00d2c790 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00d2c7a0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00d2c7b0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00d2c7c0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00d2c7d0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00d2c7e0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d2c7f0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d2c800 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00d2c810 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00d2c820 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d2c830 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00d2c840 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00d2c850 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00d2c860 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00d2c870 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00d2c880 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00d2c890 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00d2c8a0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00d2c8b0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00d2c8c0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00d2c8d0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d2c8e0 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00d2c8f0 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00d2c900 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d2c910 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00d2c920 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00d2c930 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00d2c940 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d2c950 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00d2c960 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d2c970 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ + 0x00d2c980 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ + 0x00d2c990 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ + 0x00d2c9a0 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ + 0x00d2c9b0 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ + 0x00d2c9c0 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ + 0x00d2c9d0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d2c9e0 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ + 0x00d2c9f0 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ + 0x00d2ca00 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ + 0x00d2ca10 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d2ca20 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ + 0x00d2ca30 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d2ca40 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ + 0x00d2ca50 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ + 0x00d2ca60 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ + 0x00d2ca70 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d2ca80 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ + 0x00d2ca90 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d2caa0 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ + 0x00d2cab0 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ + 0x00d2cac0 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ + 0x00d2cad0 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ + 0x00d2cae0 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ + 0x00d2caf0 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ + 0x00d2cb00 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00d2cb10 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2cb20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2cb30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2cb40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2cb50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2cb60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2cb70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2cb80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2cb90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2cba0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2cbb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2cbc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2cbd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2cbe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2cbf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2cc00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2cc10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2cc20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2cc30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2cc40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2cc50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2cc60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2cc70 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d2cc80 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ + 0x00d2cc90 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ + 0x00d2cca0 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ + 0x00d2ccb0 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ + 0x00d2ccc0 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ + 0x00d2ccd0 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ + 0x00d2cce0 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ + 0x00d2ccf0 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ + 0x00d2cd00 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d2cd10 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ + 0x00d2cd20 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ + 0x00d2cd30 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d2cd40 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d2cd50 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d2cd60 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d2cd70 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d2cd80 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d2cd90 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d2cda0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d2cdb0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d2cdc0 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d2cdd0 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d2cde0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d2cdf0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d2ce00 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d2ce10 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d2ce20 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d2ce30 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d2ce40 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d2ce50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d2ce60 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d2ce70 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d2ce80 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d2ce90 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d2cea0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d2ceb0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d2cec0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d2ced0 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d2cee0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d2cef0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2cf00 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d2cf10 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d2cf20 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d2cf30 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d2cf40 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d2cf50 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d2cf60 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d2cf70 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d2cf80 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d2cf90 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d2cfa0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d2cfb0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d2cfc0 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d2cfd0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d2cfe0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d2cff0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d2d000 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d2d010 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d2d020 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d2d030 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d2d040 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d2d050 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d2d060 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d2d070 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d2d080 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d2d090 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d2d0a0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d2d0b0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d2d0c0 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d2d0d0 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d2d0e0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d2d0f0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d2d100 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d2d110 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d2d120 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d2d130 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d2d140 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d2d150 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d2d160 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d2d170 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d2d180 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d2d190 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d2d1a0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d2d1b0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d2d1c0 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d2d1d0 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d2d1e0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d2d1f0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d2d200 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d2d210 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d2d220 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d2d230 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d2d240 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d2d250 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d2d260 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d2d270 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d2d280 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d2d290 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d2d2a0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d2d2b0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d2d2c0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d2d2d0 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ + 0x00d2d2e0 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ + 0x00d2d2f0 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ + 0x00d2d300 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ + 0x00d2d310 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ + 0x00d2d320 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d2d330 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ + 0x00d2d340 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d2d350 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00d2d360 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00d2d370 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d2d380 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00d2d390 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ + 0x00d2d3a0 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ + 0x00d2d3b0 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ + 0x00d2d3c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2d3d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2d3e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2d3f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2d400 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2d410 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2d420 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2d430 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2d440 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2d450 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2d460 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2d470 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2d480 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2d490 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2d4a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2d4b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2d4c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2d4d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2d4e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2d4f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2d500 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2d510 63342076 5f726164 6975733b 200a2020 c4 v_radius; . │ │ │ │ + 0x00d2d520 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d2d530 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d2d540 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d2d550 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d2d560 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d2d570 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d2d580 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d2d590 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d2d5a0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d2d5b0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d2d5c0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d2d5d0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d2d5e0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d2d5f0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d2d600 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d2d610 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d2d620 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d2d630 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d2d640 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d2d650 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d2d660 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d2d670 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d2d680 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d2d690 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d2d6a0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d2d6b0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d2d6c0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d2d6d0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d2d6e0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d2d6f0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d2d700 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d2d710 67506978 656c7343 6f756e74 203d2032 gPixelsCount = 2 │ │ │ │ + 0x00d2d720 2e353b20 0a202063 6f6e7374 20666c6f .5; . const flo │ │ │ │ + 0x00d2d730 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d2d740 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d2d750 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d2d760 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ + 0x00d2d770 616c436f 6c6f7220 3d20765f 636f6c6f alColor = v_colo │ │ │ │ + 0x00d2d780 723b200a 20202020 666c6f61 74206161 r; . float aa │ │ │ │ + 0x00d2d790 52616469 7573203d 206d6178 28765f72 Radius = max(v_r │ │ │ │ + 0x00d2d7a0 61646975 732e7a20 2d206b41 6e746961 adius.z - kAntia │ │ │ │ + 0x00d2d7b0 6c696173 696e6750 6978656c 73436f75 liasingPixelsCou │ │ │ │ + 0x00d2d7c0 6e742c20 302e3029 3b200a20 20202066 nt, 0.0); . f │ │ │ │ + 0x00d2d7d0 6c6f6174 20737465 7056616c 7565203d loat stepValue = │ │ │ │ + 0x00d2d7e0 20736d6f 6f746873 74657028 61615261 smoothstep(aaRa │ │ │ │ + 0x00d2d7f0 64697573 202a2061 61526164 6975732c dius * aaRadius, │ │ │ │ + 0x00d2d800 20765f72 61646975 732e7a20 2a20765f v_radius.z * v_ │ │ │ │ + 0x00d2d810 72616469 75732e7a 2c200a20 20202020 radius.z, . │ │ │ │ + 0x00d2d820 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d2d830 20202020 20202020 20202020 646f7428 dot( │ │ │ │ + 0x00d2d840 765f7261 64697573 2e78792c 20765f72 v_radius.xy, v_r │ │ │ │ + 0x00d2d850 61646975 732e7879 29293b20 0a202020 adius.xy)); . │ │ │ │ + 0x00d2d860 2066696e 616c436f 6c6f722e 61203d20 finalColor.a = │ │ │ │ + 0x00d2d870 66696e61 6c436f6c 6f722e61 202a2075 finalColor.a * u │ │ │ │ + 0x00d2d880 5f6f7061 63697479 202a2028 312e3020 _opacity * (1.0 │ │ │ │ + 0x00d2d890 2d207374 65705661 6c756529 3b200a20 - stepValue); . │ │ │ │ + 0x00d2d8a0 20202069 66202866 696e616c 436f6c6f if (finalColo │ │ │ │ + 0x00d2d8b0 722e6120 3c20302e 3031207c 7c20755f r.a < 0.01 || u_ │ │ │ │ + 0x00d2d8c0 726f7574 65506172 616d732e 79203e20 routeParams.y > │ │ │ │ + 0x00d2d8d0 765f7261 64697573 2e772920 0a202020 v_radius.w) . │ │ │ │ + 0x00d2d8e0 20202064 69736361 72643b20 0a202020 discard; . │ │ │ │ + 0x00d2d8f0 2066696e 616c436f 6c6f7220 3d207665 finalColor = ve │ │ │ │ + 0x00d2d900 6334286d 69782866 696e616c 436f6c6f c4(mix(finalColo │ │ │ │ + 0x00d2d910 722e7267 622c2075 5f6d6173 6b436f6c r.rgb, u_maskCol │ │ │ │ + 0x00d2d920 6f722e72 67622c20 755f6d61 736b436f or.rgb, u_maskCo │ │ │ │ + 0x00d2d930 6c6f722e 61292c20 66696e61 6c436f6c lor.a), finalCol │ │ │ │ + 0x00d2d940 6f722e61 293b200a 20202020 765f4672 or.a); . v_Fr │ │ │ │ + 0x00d2d950 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d2d960 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d2d970 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2d980 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2d990 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2d9a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2d9b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2d9c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2d9d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2d9e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2d9f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2da00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2da10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2da20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2da30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2da40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2da50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2da60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2da70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2da80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2da90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2daa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2dab0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2dac0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2dad0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d2dae0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d2daf0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00d2db00 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00d2db10 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00d2db20 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d2db30 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00d2db40 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00d2db50 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00d2db60 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d2db70 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d2db80 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d2db90 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d2dba0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d2dbb0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d2dbc0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d2dbd0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d2dbe0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d2dbf0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d2dc00 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d2dc10 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d2dc20 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d2dc30 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d2dc40 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d2dc50 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d2dc60 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d2dc70 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d2dc80 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d2dc90 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d2dca0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d2dcb0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d2dcc0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d2dcd0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d2dce0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d2dcf0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d2dd00 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d2dd10 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d2dd20 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d2dd30 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d2dd40 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d2dd50 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d2dd60 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d2dd70 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d2dd80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2dd90 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d2dda0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d2ddb0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d2ddc0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d2ddd0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d2dde0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d2ddf0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d2de00 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d2de10 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d2de20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d2de30 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d2de40 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d2de50 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2de60 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d2de70 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d2de80 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d2de90 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d2dea0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d2deb0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d2dec0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d2ded0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d2dee0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d2def0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d2df00 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d2df10 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d2df20 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d2df30 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d2df40 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d2df50 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d2df60 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d2df70 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d2df80 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d2df90 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d2dfa0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d2dfb0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d2dfc0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d2dfd0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d2dfe0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d2dff0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d2e000 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d2e010 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d2e020 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d2e030 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d2e040 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d2e050 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d2e060 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d2e070 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d2e080 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d2e090 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d2e0a0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d2e0b0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d2e0c0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d2e0d0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d2e0e0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d2e0f0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d2e100 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d2e110 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d2e120 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d2e130 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d2e140 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d2e150 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d2e160 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d2e170 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d2e180 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d2e190 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d2e1a0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d2e1b0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d2e1c0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d2e1d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d2e1e0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d2e1f0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d2e200 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00d2e210 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00d2e220 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00d2e230 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00d2e240 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00d2e250 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00d2e260 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00d2e270 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00d2e280 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ + 0x00d2e290 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ + 0x00d2e2a0 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ + 0x00d2e2b0 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ + 0x00d2e2c0 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ + 0x00d2e2d0 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ + 0x00d2e2e0 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ + 0x00d2e2f0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00d2e300 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d2e310 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00d2e320 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ + 0x00d2e330 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d2e340 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d2e350 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ + 0x00d2e360 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ + 0x00d2e370 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ + 0x00d2e380 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ + 0x00d2e390 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ + 0x00d2e3a0 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ + 0x00d2e3b0 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ + 0x00d2e3c0 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ + 0x00d2e3d0 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ + 0x00d2e3e0 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ + 0x00d2e3f0 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ + 0x00d2e400 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ + 0x00d2e410 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ + 0x00d2e420 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ + 0x00d2e430 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ + 0x00d2e440 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d2e450 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2e460 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2e470 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2e480 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2e490 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2e4a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2e4b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2e4c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2e4d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2e4e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2e4f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2e500 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2e510 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2e520 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2e530 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2e540 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2e550 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2e560 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2e570 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2e580 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2e590 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2e5a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2e5b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d2e5c0 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ + 0x00d2e5d0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d2e5e0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d2e5f0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00d2e600 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d2e610 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d2e620 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d2e630 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d2e640 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d2e650 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d2e660 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d2e670 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d2e680 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d2e690 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d2e6a0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d2e6b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d2e6c0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d2e6d0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d2e6e0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d2e6f0 200a2020 756e6966 6f726d20 73616d70 . uniform samp │ │ │ │ + 0x00d2e700 6c657232 4420755f 636f6c6f 72546578 ler2D u_colorTex │ │ │ │ + 0x00d2e710 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00d2e720 706c6572 32442075 5f6d6173 6b546578 pler2D u_maskTex │ │ │ │ + 0x00d2e730 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d2e740 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d2e750 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d2e760 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d2e770 200a2020 20207665 63342063 6f6c6f72 . vec4 color │ │ │ │ + 0x00d2e780 203d2074 65787475 72652875 5f636f6c = texture(u_col │ │ │ │ + 0x00d2e790 6f725465 782c2076 5f636f6c 6f725465 orTex, v_colorTe │ │ │ │ + 0x00d2e7a0 78436f6f 7264293b 200a2020 2020666c xCoord); . fl │ │ │ │ + 0x00d2e7b0 6f617420 6d61736b 203d2074 65787475 oat mask = textu │ │ │ │ + 0x00d2e7c0 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ + 0x00d2e7d0 6d61736b 54657843 6f6f7264 292e723b maskTexCoord).r; │ │ │ │ + 0x00d2e7e0 200a2020 2020636f 6c6f722e 61203d20 . color.a = │ │ │ │ + 0x00d2e7f0 636f6c6f 722e6120 2a206d61 736b202a color.a * mask * │ │ │ │ + 0x00d2e800 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00d2e810 20765f46 72616743 6f6c6f72 203d2063 v_FragColor = c │ │ │ │ + 0x00d2e820 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d2e830 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2e840 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2e850 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2e860 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2e870 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2e880 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2e890 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2e8a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2e8b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2e8c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2e8d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2e8e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2e8f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2e900 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2e910 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2e920 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2e930 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2e940 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2e950 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2e960 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2e970 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2e980 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2e990 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d2e9a0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d2e9b0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d2e9c0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d2e9d0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d2e9e0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d2e9f0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d2ea00 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d2ea10 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d2ea20 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00d2ea30 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d2ea40 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00d2ea50 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00d2ea60 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00d2ea70 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d2ea80 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d2ea90 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d2eaa0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d2eab0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00d2eac0 75743b20 0a202075 6e69666f 726d2073 ut; . uniform s │ │ │ │ + 0x00d2ead0 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00d2eae0 5465783b 200a2020 636f6e73 7420666c Tex; . const fl │ │ │ │ + 0x00d2eaf0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d2eb00 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d2eb10 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d2eb20 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ + 0x00d2eb30 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ + 0x00d2eb40 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00d2eb50 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ + 0x00d2eb60 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ + 0x00d2eb70 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ + 0x00d2eb80 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00d2eb90 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ + 0x00d2eba0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d2ebb0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2ebc0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2ebd0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2ebe0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2ebf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2ec00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2ec10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2ec20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2ec30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2ec40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2ec50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2ec60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2ec70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2ec80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2ec90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2eca0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2ecb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2ecc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2ecd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2ece0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2ecf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2ed00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2ed10 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d2ed20 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d2ed30 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d2ed40 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00d2ed50 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00d2ed60 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00d2ed70 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d2ed80 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d2ed90 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00d2eda0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00d2edb0 673b200a 2020636f 6e737420 76656333 g; . const vec3 │ │ │ │ + 0x00d2edc0 206c6967 68744469 72203d20 76656333 lightDir = vec3 │ │ │ │ + 0x00d2edd0 28302e33 31362c20 302e302c 20302e39 (0.316, 0.0, 0.9 │ │ │ │ + 0x00d2ede0 3438293b 200a2020 636f6e73 7420666c 48); . const fl │ │ │ │ + 0x00d2edf0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ + 0x00d2ee00 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ + 0x00d2ee10 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d2ee20 20207b20 0a202020 20666c6f 61742070 { . float p │ │ │ │ + 0x00d2ee30 686f6e67 44696666 75736520 3d206d61 hongDiffuse = ma │ │ │ │ + 0x00d2ee40 7828302e 302c202d 646f7428 6c696768 x(0.0, -dot(ligh │ │ │ │ + 0x00d2ee50 74446972 2c20765f 6e6f726d 616c2929 tDir, v_normal)) │ │ │ │ + 0x00d2ee60 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00d2ee70 6f72203d 20766563 34282870 686f6e67 or = vec4((phong │ │ │ │ + 0x00d2ee80 44696666 75736520 2a20302e 35202b20 Diffuse * 0.5 + │ │ │ │ + 0x00d2ee90 302e3529 202a2075 5f636f6c 6f722e72 0.5) * u_color.r │ │ │ │ + 0x00d2eea0 67622c20 755f636f 6c6f722e 61293b20 gb, u_color.a); │ │ │ │ + 0x00d2eeb0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d2eec0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2eed0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2eee0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2eef0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2ef00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2ef10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2ef20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2ef30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2ef40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2ef50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2ef60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2ef70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2ef80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2ef90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2efa0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2efb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2efc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2efd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2efe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2eff0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2f000 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d2f010 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d2f020 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d2f030 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d2f040 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d2f050 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ + 0x00d2f060 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ + 0x00d2f070 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ + 0x00d2f080 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ + 0x00d2f090 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00d2f0a0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00d2f0b0 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ + 0x00d2f0c0 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ + 0x00d2f0d0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00d2f0e0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d2f0f0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d2f100 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d2f110 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d2f120 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d2f130 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d2f140 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00d2f150 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00d2f160 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00d2f170 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00d2f180 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00d2f190 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d2f1a0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d2f1b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d2f1c0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d2f1d0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00d2f1e0 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ + 0x00d2f1f0 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ + 0x00d2f200 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00d2f210 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ + 0x00d2f220 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ + 0x00d2f230 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ + 0x00d2f240 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ + 0x00d2f250 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d2f260 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d2f270 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d2f280 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d2f290 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d2f2a0 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d2f2b0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d2f2c0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d2f2d0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d2f2e0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d2f2f0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d2f300 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d2f310 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d2f320 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d2f330 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d2f340 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d2f350 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d2f360 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d2f370 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d2f380 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d2f390 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2f3a0 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d2f3b0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d2f3c0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d2f3d0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d2f3e0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d2f3f0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d2f400 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d2f410 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d2f420 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d2f430 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d2f440 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d2f450 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d2f460 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d2f470 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d2f480 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d2f490 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d2f4a0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d2f4b0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d2f4c0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d2f4d0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d2f4e0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d2f4f0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d2f500 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d2f510 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d2f520 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d2f530 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d2f540 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d2f550 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d2f560 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d2f570 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d2f580 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d2f590 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d2f5a0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d2f5b0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d2f5c0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d2f5d0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d2f5e0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d2f5f0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d2f600 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d2f610 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d2f620 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d2f630 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d2f640 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d2f650 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d2f660 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d2f670 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d2f680 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d2f690 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d2f6a0 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d2f6b0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d2f6c0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d2f6d0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d2f6e0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d2f6f0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d2f700 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d2f710 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d2f720 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d2f730 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d2f740 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d2f750 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d2f760 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d2f770 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d2f780 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d2f790 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d2f7a0 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d2f7b0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d2f7c0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d2f7d0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d2f7e0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d2f7f0 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00d2f800 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00d2f810 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00d2f820 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00d2f830 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00d2f840 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ + 0x00d2f850 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ + 0x00d2f860 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ + 0x00d2f870 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ + 0x00d2f880 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ + 0x00d2f890 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00d2f8a0 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00d2f8b0 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ + 0x00d2f8c0 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ + 0x00d2f8d0 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ + 0x00d2f8e0 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ + 0x00d2f8f0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d2f900 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ + 0x00d2f910 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00d2f920 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ + 0x00d2f930 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d2f940 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d2f950 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d2f960 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ + 0x00d2f970 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ + 0x00d2f980 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ + 0x00d2f990 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ + 0x00d2f9a0 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ + 0x00d2f9b0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00d2f9c0 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ + 0x00d2f9d0 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ + 0x00d2f9e0 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ + 0x00d2f9f0 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ + 0x00d2fa00 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ + 0x00d2fa10 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ + 0x00d2fa20 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ + 0x00d2fa30 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00d2fa40 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00d2fa50 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d2fa60 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d2fa70 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d2fa80 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ + 0x00d2fa90 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ + 0x00d2faa0 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ + 0x00d2fab0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00d2fac0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00d2fad0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00d2fae0 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d2faf0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d2fb00 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00d2fb10 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d2fb20 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00d2fb30 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d2fb40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d2fb50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d2fb60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d2fb70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d2fb80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d2fb90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d2fba0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d2fbb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d2fbc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d2fbd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d2fbe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d2fbf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d2fc00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d2fc10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d2fc20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d2fc30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d2fc40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d2fc50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d2fc60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d2fc70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d2fc80 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ + 0x00d2fc90 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ + 0x00d2fca0 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ + 0x00d2fcb0 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ + 0x00d2fcc0 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ + 0x00d2fcd0 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ + 0x00d2fce0 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ + 0x00d2fcf0 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ + 0x00d2fd00 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ + 0x00d2fd10 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ + 0x00d2fd20 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ + 0x00d2fd30 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ + 0x00d2fd40 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d2fd50 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d2fd60 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d2fd70 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d2fd80 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d2fd90 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d2fda0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d2fdb0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d2fdc0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d2fdd0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d2fde0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d2fdf0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d2fe00 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d2fe10 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d2fe20 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d2fe30 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d2fe40 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d2fe50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d2fe60 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d2fe70 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d2fe80 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d2fe90 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d2fea0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d2feb0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d2fec0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d2fed0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d2fee0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d2fef0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d2ff00 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d2ff10 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d2ff20 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d2ff30 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d2ff40 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d2ff50 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d2ff60 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d2ff70 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d2ff80 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d2ff90 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d2ffa0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d2ffb0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d2ffc0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d2ffd0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d2ffe0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d2fff0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d30000 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d30010 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d30020 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d30030 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d30040 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d30050 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d30060 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d30070 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d30080 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d30090 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d300a0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d300b0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d300c0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d300d0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d300e0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d300f0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d30100 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d30110 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d30120 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d30130 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d30140 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d30150 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d30160 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d30170 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d30180 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d30190 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d301a0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d301b0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d301c0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d301d0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d301e0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d301f0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d30200 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d30210 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d30220 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d30230 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d30240 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d30250 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d30260 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d30270 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d30280 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d30290 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d302a0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d302b0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d302c0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d302d0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d302e0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d302f0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d30300 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d30310 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d30320 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d30330 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d30340 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ + 0x00d30350 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ + 0x00d30360 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ + 0x00d30370 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ + 0x00d30380 293b200a 2020200a 20202020 76656334 ); . . vec4 │ │ │ │ + 0x00d30390 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ + 0x00d303a0 78203d20 755f7469 6c65436f 6f726473 x = u_tileCoords │ │ │ │ + 0x00d303b0 4d696e4d 61785b67 6c5f496e 7374616e MinMax[gl_Instan │ │ │ │ + 0x00d303c0 63654944 5d3b200a 20202020 76656332 ceID]; . vec2 │ │ │ │ + 0x00d303d0 20776f72 6c64506f 73203d20 6d697828 worldPos = mix( │ │ │ │ + 0x00d303e0 74696c65 436f6f72 64734d69 6e4d6178 tileCoordsMinMax │ │ │ │ + 0x00d303f0 2e78792c 2074696c 65436f6f 7264734d .xy, tileCoordsM │ │ │ │ + 0x00d30400 696e4d61 782e7a77 2c207175 61645665 inMax.zw, quadVe │ │ │ │ + 0x00d30410 72746578 293b200a 20202020 76656334 rtex); . vec4 │ │ │ │ + 0x00d30420 20706f73 203d2076 65633428 776f726c pos = vec4(worl │ │ │ │ + 0x00d30430 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d30440 2a20755f 6d6f6465 6c566965 77202a20 * u_modelView * │ │ │ │ + 0x00d30450 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d30460 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00d30470 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d30480 666f726d 28706f73 2c20755f 7069766f form(pos, u_pivo │ │ │ │ + 0x00d30490 74547261 6e73666f 726d2c20 302e3029 tTransform, 0.0) │ │ │ │ + 0x00d304a0 3b200a20 20200a20 20202076 5f746578 ; . . v_tex │ │ │ │ + 0x00d304b0 436f6f72 6473203d 20766563 33287175 Coords = vec3(qu │ │ │ │ + 0x00d304c0 61645665 72746578 2c20666c 6f617428 adVertex, float( │ │ │ │ + 0x00d304d0 755f7465 78747572 65496e64 65785b67 u_textureIndex[g │ │ │ │ + 0x00d304e0 6c5f496e 7374616e 63654944 5d29293b l_InstanceID])); │ │ │ │ + 0x00d304f0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d30500 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d30510 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d30520 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d30530 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d30540 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d30550 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d30560 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d30570 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d30580 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d30590 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d305a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d305b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d305c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d305d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d305e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d305f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d30600 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d30610 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d30620 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d30630 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d30640 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d30650 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d30660 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d30670 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d30680 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d30690 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d306a0 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00d306b0 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ + 0x00d306c0 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ + 0x00d306d0 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ + 0x00d306e0 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ + 0x00d306f0 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d30700 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d30710 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d30720 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d30730 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d30740 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d30750 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ + 0x00d30760 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d30770 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ + 0x00d30780 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d30790 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ + 0x00d307a0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d307b0 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ + 0x00d307c0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d307d0 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ + 0x00d307e0 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00d307f0 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ + 0x00d30800 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ + 0x00d30810 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ + 0x00d30820 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d30830 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d30840 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d30850 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d30860 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d30870 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d30880 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d30890 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d308a0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d308b0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d308c0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d308d0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d308e0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d308f0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d30900 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d30910 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d30920 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d30930 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d30940 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d30950 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d30960 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d30970 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d30980 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d30990 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d309a0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d309b0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d309c0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d309d0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d309e0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d309f0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d30a00 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d30a10 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d30a20 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d30a30 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d30a40 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d30a50 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d30a60 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d30a70 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d30a80 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d30a90 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d30aa0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d30ab0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d30ac0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d30ad0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d30ae0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d30af0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d30b00 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d30b10 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d30b20 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d30b30 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d30b40 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d30b50 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d30b60 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d30b70 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d30b80 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d30b90 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d30ba0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d30bb0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d30bc0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d30bd0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d30be0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d30bf0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d30c00 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d30c10 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d30c20 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d30c30 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d30c40 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d30c50 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d30c60 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d30c70 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d30c80 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d30c90 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d30ca0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d30cb0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d30cc0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d30cd0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d30ce0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d30cf0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d30d00 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d30d10 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d30d20 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d30d30 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d30d40 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d30d50 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d30d60 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d30d70 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d30d80 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d30d90 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d30da0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d30db0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d30dc0 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ + 0x00d30dd0 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ + 0x00d30de0 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00d30df0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00d30e00 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00d30e10 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00d30e20 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00d30e30 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d30e40 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00d30e50 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00d30e60 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00d30e70 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ + 0x00d30e80 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ + 0x00d30e90 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ + 0x00d30ea0 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ + 0x00d30eb0 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ + 0x00d30ec0 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d30ed0 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ + 0x00d30ee0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d30ef0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d30f00 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00d30f10 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d30f20 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00d30f30 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ + 0x00d30f40 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d30f50 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d30f60 20202020 20202020 20202020 20755f6d u_m │ │ │ │ + 0x00d30f70 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ + 0x00d30f80 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ + 0x00d30f90 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ + 0x00d30fa0 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ + 0x00d30fb0 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ + 0x00d30fc0 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ + 0x00d30fd0 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ + 0x00d30fe0 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ + 0x00d30ff0 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ + 0x00d31000 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d31010 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ + 0x00d31020 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ + 0x00d31030 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ + 0x00d31040 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ + 0x00d31050 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ + 0x00d31060 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ + 0x00d31070 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ + 0x00d31080 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ + 0x00d31090 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ + 0x00d310a0 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ + 0x00d310b0 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d310c0 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ + 0x00d310d0 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ + 0x00d310e0 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ + 0x00d310f0 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ + 0x00d31100 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ + 0x00d31110 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ + 0x00d31120 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00d31130 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ + 0x00d31140 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d31150 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ + 0x00d31160 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ + 0x00d31170 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ + 0x00d31180 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ + 0x00d31190 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ + 0x00d311a0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d311b0 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ + 0x00d311c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d311d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d311e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d311f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d31200 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d31210 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d31220 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d31230 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d31240 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d31250 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d31260 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d31270 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d31280 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d31290 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d312a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d312b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d312c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d312d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d312e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d312f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d31300 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d31310 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d31320 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d31330 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d31340 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d31350 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d31360 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d31370 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d31380 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d31390 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d313a0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d313b0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d313c0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d313d0 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ + 0x00d313e0 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ + 0x00d313f0 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ + 0x00d31400 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00d31410 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ + 0x00d31420 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d31430 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00d31440 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d31450 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ + 0x00d31460 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d31470 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ + 0x00d31480 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d31490 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ + 0x00d314a0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d314b0 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ + 0x00d314c0 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ + 0x00d314d0 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ + 0x00d314e0 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ + 0x00d314f0 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ + 0x00d31500 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d31510 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ + 0x00d31520 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d31530 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d31540 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d31550 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d31560 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d31570 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d31580 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d31590 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d315a0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d315b0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d315c0 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d315d0 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d315e0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d315f0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d31600 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d31610 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d31620 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d31630 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d31640 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d31650 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d31660 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d31670 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d31680 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d31690 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d316a0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d316b0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d316c0 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d316d0 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d316e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d316f0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d31700 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d31710 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d31720 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d31730 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d31740 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d31750 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d31760 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d31770 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d31780 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d31790 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d317a0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d317b0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d317c0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d317d0 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d317e0 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d317f0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d31800 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d31810 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d31820 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d31830 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d31840 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d31850 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d31860 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d31870 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d31880 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d31890 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d318a0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d318b0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d318c0 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d318d0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d318e0 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d318f0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d31900 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d31910 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d31920 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d31930 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d31940 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d31950 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d31960 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d31970 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d31980 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d31990 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d319a0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d319b0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d319c0 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d319d0 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d319e0 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d319f0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d31a00 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d31a10 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d31a20 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d31a30 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d31a40 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d31a50 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d31a60 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d31a70 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d31a80 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d31a90 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d31aa0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d31ab0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d31ac0 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d31ad0 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d31ae0 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d31af0 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d31b00 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d31b10 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ + 0x00d31b20 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ + 0x00d31b30 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ + 0x00d31b40 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ + 0x00d31b50 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ + 0x00d31b60 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ + 0x00d31b70 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d31b80 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ + 0x00d31b90 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d31ba0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d31bb0 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ + 0x00d31bc0 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ + 0x00d31bd0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d31be0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d31bf0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d31c00 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ + 0x00d31c10 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ + 0x00d31c20 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ + 0x00d31c30 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d31c40 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d31c50 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d31c60 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d31c70 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d31c80 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d31c90 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d31ca0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d31cb0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d31cc0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d31cd0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d31ce0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d31cf0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d31d00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d31d10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d31d20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d31d30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d31d40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d31d50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d31d60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d31d70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d31d80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d31d90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d31da0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d31db0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d31dc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d31dd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d31de0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d31df0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d31e00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d31e10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d31e20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d31e30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d31e40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d31e50 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d31e60 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d31e70 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d31e80 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d31e90 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ + 0x00d31ea0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d31eb0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d31ec0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d31ed0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d31ee0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d31ef0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d31f00 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ + 0x00d31f10 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ + 0x00d31f20 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ + 0x00d31f30 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ + 0x00d31f40 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ + 0x00d31f50 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ + 0x00d31f60 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d31f70 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d31f80 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ + 0x00d31f90 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d31fa0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d31fb0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d31fc0 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ + 0x00d31fd0 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ + 0x00d31fe0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d31ff0 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ + 0x00d32000 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ + 0x00d32010 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ + 0x00d32020 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d32030 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ + 0x00d32040 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ + 0x00d32050 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d32060 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ + 0x00d32070 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ + 0x00d32080 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ + 0x00d32090 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d320a0 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ + 0x00d320b0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d320c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d320d0 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ + 0x00d320e0 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ + 0x00d320f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d32100 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ + 0x00d32110 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ + 0x00d32120 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ + 0x00d32130 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d32140 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ + 0x00d32150 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ + 0x00d32160 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ + 0x00d32170 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ + 0x00d32180 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d32190 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d321a0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d321b0 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ + 0x00d321c0 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ + 0x00d321d0 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ + 0x00d321e0 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ + 0x00d321f0 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ + 0x00d32200 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ + 0x00d32210 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d32220 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ + 0x00d32230 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ + 0x00d32240 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ + 0x00d32250 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ + 0x00d32260 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ + 0x00d32270 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ + 0x00d32280 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ + 0x00d32290 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ + 0x00d322a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d322b0 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ + 0x00d322c0 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ + 0x00d322d0 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ + 0x00d322e0 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ + 0x00d322f0 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ + 0x00d32300 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ + 0x00d32310 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ + 0x00d32320 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ + 0x00d32330 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ + 0x00d32340 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ + 0x00d32350 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ + 0x00d32360 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d32370 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ + 0x00d32380 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ + 0x00d32390 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ + 0x00d323a0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d323b0 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ + 0x00d323c0 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ + 0x00d323d0 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ + 0x00d323e0 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ + 0x00d323f0 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ + 0x00d32400 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ + 0x00d32410 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ + 0x00d32420 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ + 0x00d32430 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ + 0x00d32440 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ + 0x00d32450 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ + 0x00d32460 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ + 0x00d32470 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ + 0x00d32480 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d32490 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ + 0x00d324a0 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ + 0x00d324b0 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ + 0x00d324c0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d324d0 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ + 0x00d324e0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d324f0 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ + 0x00d32500 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ + 0x00d32510 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00d32520 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d32530 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00d32540 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00d32550 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00d32560 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ + 0x00d32570 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ + 0x00d32580 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00d32590 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00d325a0 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ + 0x00d325b0 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ + 0x00d325c0 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ + 0x00d325d0 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ + 0x00d325e0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d325f0 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ + 0x00d32600 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d32610 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ + 0x00d32620 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d32630 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d32640 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d32650 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ + 0x00d32660 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ + 0x00d32670 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ + 0x00d32680 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d32690 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00d326a0 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ + 0x00d326b0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00d326c0 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ + 0x00d326d0 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ + 0x00d326e0 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ + 0x00d326f0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d32700 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ + 0x00d32710 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ + 0x00d32720 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d32730 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d32740 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d32750 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d32760 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d32770 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d32780 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d32790 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d327a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d327b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d327c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d327d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d327e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d327f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d32800 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d32810 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d32820 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d32830 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d32840 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d32850 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d32860 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d32870 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d32880 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d32890 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d328a0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d328b0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d328c0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d328d0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d328e0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d328f0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d32900 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ + 0x00d32910 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ + 0x00d32920 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ + 0x00d32930 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d32940 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d32950 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ + 0x00d32960 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d32970 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d32980 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ + 0x00d32990 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d329a0 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ + 0x00d329b0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00d329c0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00d329d0 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ + 0x00d329e0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d329f0 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ + 0x00d32a00 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ + 0x00d32a10 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ + 0x00d32a20 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ + 0x00d32a30 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ + 0x00d32a40 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ + 0x00d32a50 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d32a60 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d32a70 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d32a80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d32a90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d32aa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d32ab0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d32ac0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d32ad0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d32ae0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d32af0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d32b00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d32b10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d32b20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d32b30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d32b40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d32b50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d32b60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d32b70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d32b80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d32b90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d32ba0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d32bb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d32bc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d32bd0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d32be0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d32bf0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d32c00 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d32c10 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d32c20 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00d32c30 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ + 0x00d32c40 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ + 0x00d32c50 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d32c60 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d32c70 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d32c80 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d32c90 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d32ca0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d32cb0 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ + 0x00d32cc0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d32cd0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00d32ce0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d32cf0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ + 0x00d32d00 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00d32d10 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ + 0x00d32d20 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d32d30 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ + 0x00d32d40 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d32d50 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d32d60 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d32d70 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d32d80 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d32d90 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d32da0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d32db0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d32dc0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d32dd0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d32de0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d32df0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d32e00 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d32e10 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d32e20 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d32e30 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d32e40 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d32e50 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d32e60 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d32e70 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d32e80 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d32e90 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d32ea0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d32eb0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d32ec0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d32ed0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d32ee0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d32ef0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d32f00 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d32f10 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d32f20 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d32f30 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d32f40 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d32f50 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d32f60 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d32f70 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d32f80 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d32f90 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d32fa0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d32fb0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d32fc0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d32fd0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d32fe0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d32ff0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d33000 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d33010 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d33020 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d33030 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d33040 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d33050 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d33060 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d33070 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d33080 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d33090 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d330a0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d330b0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d330c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d330d0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d330e0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d330f0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d33100 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d33110 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d33120 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d33130 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d33140 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d33150 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d33160 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d33170 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d33180 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d33190 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d331a0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d331b0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d331c0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d331d0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d331e0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d331f0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d33200 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d33210 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d33220 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d33230 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d33240 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d33250 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d33260 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d33270 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d33280 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d33290 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d332a0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d332b0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d332c0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d332d0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d332e0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d332f0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d33300 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ + 0x00d33310 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ + 0x00d33320 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ + 0x00d33330 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ + 0x00d33340 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ + 0x00d33350 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ + 0x00d33360 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d33370 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ + 0x00d33380 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ + 0x00d33390 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ + 0x00d333a0 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ + 0x00d333b0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00d333c0 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ + 0x00d333d0 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ + 0x00d333e0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00d333f0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d33400 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00d33410 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00d33420 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00d33430 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ + 0x00d33440 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ + 0x00d33450 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ + 0x00d33460 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d33470 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ + 0x00d33480 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ + 0x00d33490 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d334a0 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ + 0x00d334b0 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ + 0x00d334c0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d334d0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d334e0 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00d334f0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ + 0x00d33500 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ + 0x00d33510 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ + 0x00d33520 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ + 0x00d33530 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ + 0x00d33540 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ + 0x00d33550 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ + 0x00d33560 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ + 0x00d33570 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d33580 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ + 0x00d33590 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ + 0x00d335a0 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ + 0x00d335b0 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ + 0x00d335c0 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ + 0x00d335d0 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ + 0x00d335e0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d335f0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d33600 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d33610 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d33620 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d33630 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d33640 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d33650 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d33660 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d33670 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d33680 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d33690 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d336a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d336b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d336c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d336d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d336e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d336f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d33700 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d33710 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d33720 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d33730 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d33740 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d33750 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d33760 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d33770 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d33780 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d33790 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d337a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d337b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d337c0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d337d0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d337e0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d337f0 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ + 0x00d33800 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ + 0x00d33810 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00d33820 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ + 0x00d33830 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ + 0x00d33840 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ + 0x00d33850 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d33860 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d33870 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d33880 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d33890 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d338a0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d338b0 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00d338c0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d338d0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00d338e0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d338f0 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ + 0x00d33900 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ + 0x00d33910 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ + 0x00d33920 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ + 0x00d33930 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ + 0x00d33940 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d33950 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d33960 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00d33970 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d33980 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00d33990 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00d339a0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00d339b0 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00d339c0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d339d0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00d339e0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00d339f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d33a00 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00d33a10 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00d33a20 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d33a30 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d33a40 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00d33a50 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00d33a60 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d33a70 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00d33a80 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00d33a90 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00d33aa0 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00d33ab0 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00d33ac0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d33ad0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00d33ae0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00d33af0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d33b00 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00d33b10 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00d33b20 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d33b30 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00d33b40 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00d33b50 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00d33b60 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00d33b70 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d33b80 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d33b90 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d33ba0 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00d33bb0 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00d33bc0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00d33bd0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00d33be0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d33bf0 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00d33c00 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d33c10 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00d33c20 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00d33c30 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00d33c40 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00d33c50 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00d33c60 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00d33c70 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00d33c80 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00d33c90 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00d33ca0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d33cb0 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00d33cc0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00d33cd0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00d33ce0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00d33cf0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d33d00 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00d33d10 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00d33d20 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00d33d30 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00d33d40 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00d33d50 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d33d60 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00d33d70 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00d33d80 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d33d90 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00d33da0 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00d33db0 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00d33dc0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00d33dd0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00d33de0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d33df0 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00d33e00 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00d33e10 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00d33e20 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00d33e30 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00d33e40 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00d33e50 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00d33e60 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d33e70 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00d33e80 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00d33e90 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00d33ea0 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00d33eb0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d33ec0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00d33ed0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d33ee0 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ + 0x00d33ef0 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ + 0x00d33f00 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ + 0x00d33f10 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ + 0x00d33f20 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00d33f30 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d33f40 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00d33f50 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00d33f60 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00d33f70 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ + 0x00d33f80 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ + 0x00d33f90 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ + 0x00d33fa0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d33fb0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d33fc0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00d33fd0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d33fe0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00d33ff0 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ + 0x00d34000 20202020 20202020 20202020 20202020 │ │ │ │ 0x00d34010 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d34020 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d34030 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d34040 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ - 0x00d34050 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ - 0x00d34060 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ - 0x00d34070 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ - 0x00d34080 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ - 0x00d34090 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00d340a0 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ - 0x00d340b0 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ - 0x00d340c0 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ - 0x00d340d0 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ - 0x00d340e0 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ - 0x00d340f0 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ - 0x00d34100 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ - 0x00d34110 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ - 0x00d34120 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00d34130 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00d34140 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00d34150 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d34160 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ - 0x00d34170 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ - 0x00d34180 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ - 0x00d34190 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00d341a0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00d341b0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00d341c0 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00d341d0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00d341e0 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00d341f0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d34200 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00d34210 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d34220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d34230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d34240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d34250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d34260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d34270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d34280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d34290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d342a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d342b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d342c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d342d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d342e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d342f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d34300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d34310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d34320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d34330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d34340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d34350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d34360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d34370 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ - 0x00d34380 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ - 0x00d34390 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ - 0x00d343a0 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ - 0x00d343b0 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ - 0x00d343c0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00d343d0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ - 0x00d343e0 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ - 0x00d343f0 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ - 0x00d34400 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00d34410 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00d34420 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00d34430 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ - 0x00d34440 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d34450 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ - 0x00d34460 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ - 0x00d34470 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ - 0x00d34480 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ - 0x00d34490 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ - 0x00d344a0 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ - 0x00d344b0 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ - 0x00d344c0 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ - 0x00d344d0 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ - 0x00d344e0 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ - 0x00d344f0 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ - 0x00d34500 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ - 0x00d34510 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ - 0x00d34520 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ - 0x00d34530 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ - 0x00d34540 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ - 0x00d34550 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ - 0x00d34560 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ - 0x00d34570 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d34580 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ - 0x00d34590 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ - 0x00d345a0 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ - 0x00d345b0 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ - 0x00d345c0 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ - 0x00d345d0 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d345e0 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ - 0x00d345f0 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ - 0x00d34600 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ - 0x00d34610 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ - 0x00d34620 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ - 0x00d34630 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ - 0x00d34640 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ - 0x00d34650 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ - 0x00d34660 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ - 0x00d34670 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ - 0x00d34680 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ - 0x00d34690 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ - 0x00d346a0 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ - 0x00d346b0 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ - 0x00d346c0 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ - 0x00d346d0 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ - 0x00d346e0 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ - 0x00d346f0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00d34700 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ - 0x00d34710 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ - 0x00d34720 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ - 0x00d34730 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ - 0x00d34740 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ - 0x00d34750 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ - 0x00d34760 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ - 0x00d34770 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ - 0x00d34780 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ - 0x00d34790 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ - 0x00d347a0 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ - 0x00d347b0 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ - 0x00d347c0 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ - 0x00d347d0 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ - 0x00d347e0 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ - 0x00d347f0 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ - 0x00d34800 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ - 0x00d34810 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ - 0x00d34820 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ - 0x00d34830 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ - 0x00d34840 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ - 0x00d34850 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ - 0x00d34860 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ - 0x00d34870 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ - 0x00d34880 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ - 0x00d34890 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ - 0x00d348a0 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ - 0x00d348b0 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00d348c0 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00d348d0 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00d348e0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00d348f0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00d34900 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ - 0x00d34910 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00d34920 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00d34930 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00d34940 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00d34950 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00d34960 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00d34970 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00d34980 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00d34990 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ - 0x00d349a0 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ - 0x00d349b0 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ - 0x00d349c0 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ - 0x00d349d0 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ - 0x00d349e0 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ - 0x00d349f0 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ - 0x00d34a00 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ - 0x00d34a10 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ - 0x00d34a20 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00d34a30 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00d34a40 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00d34a50 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00d34a60 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ - 0x00d34a70 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00d34a80 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00d34a90 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00d34aa0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00d34ab0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00d34ac0 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ - 0x00d34ad0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00d34ae0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00d34af0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00d34b00 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00d34b10 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00d34b20 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00d34b30 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00d34b40 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00d34b50 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ - 0x00d34b60 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ - 0x00d34b70 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ - 0x00d34b80 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ - 0x00d34b90 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ - 0x00d34ba0 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ - 0x00d34bb0 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ - 0x00d34bc0 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ - 0x00d34bd0 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ - 0x00d34be0 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ - 0x00d34bf0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00d34c00 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00d34c10 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00d34c20 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ - 0x00d34c30 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ - 0x00d34c40 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ - 0x00d34c50 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ - 0x00d34c60 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ - 0x00d34c70 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ - 0x00d34c80 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ - 0x00d34c90 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ - 0x00d34ca0 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ - 0x00d34cb0 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ - 0x00d34cc0 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ - 0x00d34cd0 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ - 0x00d34ce0 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ - 0x00d34cf0 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ - 0x00d34d00 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ - 0x00d34d10 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ - 0x00d34d20 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d34d30 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ - 0x00d34d40 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ - 0x00d34d50 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ - 0x00d34d60 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ - 0x00d34d70 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ - 0x00d34d80 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ - 0x00d34d90 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ - 0x00d34da0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00d34db0 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ - 0x00d34dc0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00d34dd0 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ - 0x00d34de0 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ - 0x00d34df0 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ - 0x00d34e00 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ - 0x00d34e10 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ - 0x00d34e20 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ - 0x00d34e30 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ - 0x00d34e40 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ - 0x00d34e50 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ - 0x00d34e60 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ - 0x00d34e70 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ - 0x00d34e80 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ - 0x00d34e90 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ - 0x00d34ea0 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ - 0x00d34eb0 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ - 0x00d34ec0 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ - 0x00d34ed0 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ - 0x00d34ee0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00d34ef0 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ - 0x00d34f00 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ - 0x00d34f10 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ - 0x00d34f20 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ - 0x00d34f30 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ - 0x00d34f40 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ - 0x00d34f50 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ - 0x00d34f60 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ - 0x00d34f70 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ - 0x00d34f80 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ - 0x00d34f90 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ - 0x00d34fa0 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ - 0x00d34fb0 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ - 0x00d34fc0 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ - 0x00d34fd0 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ - 0x00d34fe0 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ - 0x00d34ff0 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ - 0x00d35000 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ - 0x00d35010 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ - 0x00d35020 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ - 0x00d35030 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ - 0x00d35040 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ - 0x00d35050 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ - 0x00d35060 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ - 0x00d35070 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ - 0x00d35080 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ - 0x00d35090 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ - 0x00d350a0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d350b0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d350c0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d350d0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d350e0 65633420 77656967 68747320 3d207665 ec4 weights = ve │ │ │ │ - 0x00d350f0 63342830 2e302c20 302e302c 20302e30 c4(0.0, 0.0, 0.0 │ │ │ │ - 0x00d35100 2c20302e 30293b20 0a202020 20766563 , 0.0); . vec │ │ │ │ - 0x00d35110 32206520 3d207465 78747572 6528755f 2 e = texture(u_ │ │ │ │ - 0x00d35120 636f6c6f 72546578 2c20765f 636f6f72 colorTex, v_coor │ │ │ │ - 0x00d35130 64732e78 79292e72 673b200a 20202020 ds.xy).rg; . │ │ │ │ - 0x00d35140 69662028 652e6720 3e20302e 3029202f if (e.g > 0.0) / │ │ │ │ - 0x00d35150 2f204564 67652061 74206e6f 72746820 / Edge at north │ │ │ │ - 0x00d35160 0a202020 207b200a 20202020 20207665 . { . ve │ │ │ │ - 0x00d35170 63322064 3b200a20 20202020 20766563 c2 d; . vec │ │ │ │ - 0x00d35180 3320636f 6f726473 3b200a20 20202020 3 coords; . │ │ │ │ - 0x00d35190 20636f6f 7264732e 78203d20 534d4141 coords.x = SMAA │ │ │ │ - 0x00d351a0 53656172 6368584c 65667428 765f6f66 SearchXLeft(v_of │ │ │ │ - 0x00d351b0 66736574 302e7879 2c20765f 6f666673 fset0.xy, v_offs │ │ │ │ - 0x00d351c0 6574322e 78293b20 0a202020 20202063 et2.x); . c │ │ │ │ - 0x00d351d0 6f6f7264 732e7920 3d20765f 6f666673 oords.y = v_offs │ │ │ │ - 0x00d351e0 6574312e 793b200a 20202020 2020642e et1.y; . d. │ │ │ │ - 0x00d351f0 78203d20 636f6f72 64732e78 3b200a20 x = coords.x; . │ │ │ │ - 0x00d35200 20202020 20666c6f 61742065 31203d20 float e1 = │ │ │ │ - 0x00d35210 534d4141 53616d70 6c654c65 76656c5a SMAASampleLevelZ │ │ │ │ - 0x00d35220 65726f28 755f636f 6c6f7254 65782c20 ero(u_colorTex, │ │ │ │ - 0x00d35230 636f6f72 64732e78 79292e72 3b200a20 coords.xy).r; . │ │ │ │ - 0x00d35240 20202020 20636f6f 7264732e 7a203d20 coords.z = │ │ │ │ - 0x00d35250 534d4141 53656172 63685852 69676874 SMAASearchXRight │ │ │ │ - 0x00d35260 28765f6f 66667365 74302e7a 772c2076 (v_offset0.zw, v │ │ │ │ - 0x00d35270 5f6f6666 73657432 2e79293b 200a2020 _offset2.y); . │ │ │ │ - 0x00d35280 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ - 0x00d35290 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ - 0x00d352a0 7a7a203d 20755f66 72616d65 62756666 zz = u_framebuff │ │ │ │ - 0x00d352b0 65724d65 74726963 732e7a7a 3b200a20 erMetrics.zz; . │ │ │ │ - 0x00d352c0 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ - 0x00d352d0 41526f75 6e64287a 7a202a20 64202d20 ARound(zz * d - │ │ │ │ - 0x00d352e0 765f636f 6f726473 2e7a7a29 293b200a v_coords.zz)); . │ │ │ │ - 0x00d352f0 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ - 0x00d35300 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ - 0x00d35310 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ - 0x00d35320 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ - 0x00d35330 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ - 0x00d35340 5465782c 20636f6f 7264732e 7a792c20 Tex, coords.zy, │ │ │ │ - 0x00d35350 534d4141 4f666673 65742831 2c203029 SMAAOffset(1, 0) │ │ │ │ - 0x00d35360 292e723b 200a2020 20202020 77656967 ).r; . weig │ │ │ │ - 0x00d35370 6874732e 7267203d 20534d41 41417265 hts.rg = SMAAAre │ │ │ │ - 0x00d35380 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ - 0x00d35390 293b200a 20202020 7d200a20 20202069 ); . } . i │ │ │ │ - 0x00d353a0 66202865 2e72203e 20302e30 29202f2f f (e.r > 0.0) // │ │ │ │ - 0x00d353b0 20456467 65206174 20776573 74200a20 Edge at west . │ │ │ │ - 0x00d353c0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ - 0x00d353d0 20643b20 0a202020 20202076 65633320 d; . vec3 │ │ │ │ - 0x00d353e0 636f6f72 64733b20 0a202020 20202063 coords; . c │ │ │ │ - 0x00d353f0 6f6f7264 732e7920 3d20534d 41415365 oords.y = SMAASe │ │ │ │ - 0x00d35400 61726368 59557028 765f6f66 66736574 archYUp(v_offset │ │ │ │ - 0x00d35410 312e7879 2c20765f 6f666673 6574322e 1.xy, v_offset2. │ │ │ │ - 0x00d35420 7a293b20 0a202020 20202063 6f6f7264 z); . coord │ │ │ │ - 0x00d35430 732e7820 3d20765f 6f666673 6574302e s.x = v_offset0. │ │ │ │ - 0x00d35440 783b200a 20202020 2020642e 78203d20 x; . d.x = │ │ │ │ - 0x00d35450 636f6f72 64732e79 3b200a20 20202020 coords.y; . │ │ │ │ - 0x00d35460 20666c6f 61742065 31203d20 534d4141 float e1 = SMAA │ │ │ │ - 0x00d35470 53616d70 6c654c65 76656c5a 65726f28 SampleLevelZero( │ │ │ │ - 0x00d35480 755f636f 6c6f7254 65782c20 636f6f72 u_colorTex, coor │ │ │ │ - 0x00d35490 64732e78 79292e67 3b200a20 20202020 ds.xy).g; . │ │ │ │ - 0x00d354a0 20636f6f 7264732e 7a203d20 534d4141 coords.z = SMAA │ │ │ │ - 0x00d354b0 53656172 63685944 6f776e28 765f6f66 SearchYDown(v_of │ │ │ │ - 0x00d354c0 66736574 312e7a77 2c20765f 6f666673 fset1.zw, v_offs │ │ │ │ - 0x00d354d0 6574322e 77293b20 0a202020 20202064 et2.w); . d │ │ │ │ - 0x00d354e0 2e79203d 20636f6f 7264732e 7a3b200a .y = coords.z; . │ │ │ │ - 0x00d354f0 20202020 20207665 63322077 77203d20 vec2 ww = │ │ │ │ - 0x00d35500 755f6672 616d6562 75666665 724d6574 u_framebufferMet │ │ │ │ - 0x00d35510 72696373 2e77773b 200a2020 20202020 rics.ww; . │ │ │ │ - 0x00d35520 64203d20 61627328 534d4141 526f756e d = abs(SMAARoun │ │ │ │ - 0x00d35530 64287777 202a2064 202d2076 5f636f6f d(ww * d - v_coo │ │ │ │ - 0x00d35540 7264732e 77772929 3b200a20 20202020 rds.ww)); . │ │ │ │ - 0x00d35550 20766563 32207371 72745f64 203d2073 vec2 sqrt_d = s │ │ │ │ - 0x00d35560 71727428 64293b20 0a202020 20202066 qrt(d); . f │ │ │ │ - 0x00d35570 6c6f6174 20653220 3d20534d 41415361 loat e2 = SMAASa │ │ │ │ - 0x00d35580 6d706c65 4c657665 6c5a6572 6f4f6666 mpleLevelZeroOff │ │ │ │ - 0x00d35590 73657428 755f636f 6c6f7254 65782c20 set(u_colorTex, │ │ │ │ - 0x00d355a0 636f6f72 64732e78 7a2c2053 4d41414f coords.xz, SMAAO │ │ │ │ - 0x00d355b0 66667365 7428302c 20312929 2e673b20 ffset(0, 1)).g; │ │ │ │ - 0x00d355c0 0a202020 20202077 65696768 74732e62 . weights.b │ │ │ │ - 0x00d355d0 61203d20 534d4141 41726561 28737172 a = SMAAArea(sqr │ │ │ │ - 0x00d355e0 745f642c 2065312c 20653229 3b200a20 t_d, e1, e2); . │ │ │ │ - 0x00d355f0 2020207d 200a2020 2020765f 46726167 } . v_Frag │ │ │ │ - 0x00d35600 436f6c6f 72203d20 77656967 6874733b Color = weights; │ │ │ │ - 0x00d35610 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d35620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d35630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d35640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d35650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d35660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d35670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d35680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d35690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d356a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d356b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d356c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d356d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d356e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d356f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d35700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d35710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d35720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d35730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d35740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d35750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d35760 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d35770 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d35780 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d35790 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ - 0x00d357a0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d357b0 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ - 0x00d357c0 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ - 0x00d357d0 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ - 0x00d357e0 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ - 0x00d357f0 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ - 0x00d35800 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ - 0x00d35810 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ - 0x00d35820 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ - 0x00d35830 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ - 0x00d35840 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ - 0x00d35850 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ - 0x00d35860 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00d35870 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ - 0x00d35880 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ - 0x00d35890 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ - 0x00d358a0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d358b0 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ - 0x00d358c0 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00d358d0 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ - 0x00d358e0 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ - 0x00d358f0 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ - 0x00d35900 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00d35910 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00d35920 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00d35930 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d35940 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d35950 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d35960 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00d35970 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d35980 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d35990 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00d359a0 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00d359b0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00d359c0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d359d0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00d359e0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00d359f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d35a00 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d35a10 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00d35a20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d35a30 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00d35a40 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00d35a50 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00d35a60 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d35a70 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00d35a80 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00d35a90 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d35aa0 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00d35ab0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00d35ac0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d35ad0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00d35ae0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00d35af0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00d35b00 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00d35b10 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00d35b20 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00d35b30 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00d35b40 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00d35b50 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00d35b60 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00d35b70 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00d35b80 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00d35b90 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00d35ba0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d35bb0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00d35bc0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00d35bd0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00d35be0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00d35bf0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00d35c00 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d35c10 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00d35c20 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00d35c30 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00d35c40 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d35c50 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00d35c60 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00d35c70 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00d35c80 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00d35c90 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00d35ca0 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00d35cb0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00d35cc0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00d35cd0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00d35ce0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00d35cf0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00d35d00 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d35d10 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d35d20 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00d35d30 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00d35d40 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00d35d50 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00d35d60 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00d35d70 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00d35d80 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00d35d90 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00d35da0 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00d35db0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00d35dc0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00d35dd0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00d35de0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00d35df0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d35e00 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00d35e10 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00d35e20 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d35e30 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00d35e40 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00d35e50 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00d35e60 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d35e70 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00d35e80 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00d35e90 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ - 0x00d35ea0 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ - 0x00d35eb0 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ - 0x00d35ec0 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ - 0x00d35ed0 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ - 0x00d35ee0 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ - 0x00d35ef0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d35f00 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ - 0x00d35f10 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ - 0x00d35f20 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ - 0x00d35f30 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00d35f40 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ - 0x00d35f50 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d35f60 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ - 0x00d35f70 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ - 0x00d35f80 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ - 0x00d35f90 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00d35fa0 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ - 0x00d35fb0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00d35fc0 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ - 0x00d35fd0 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ - 0x00d35fe0 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ - 0x00d35ff0 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ - 0x00d36000 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ - 0x00d36010 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ - 0x00d36020 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00d36030 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d36040 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d36050 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d36060 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d36070 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d36080 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d36090 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d360a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d360b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d360c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d360d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d360e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d360f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d36100 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d36110 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d36120 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d36130 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d36140 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d36150 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d36160 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d36170 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d36180 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d36190 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d361a0 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ - 0x00d361b0 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ - 0x00d361c0 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ - 0x00d361d0 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ - 0x00d361e0 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ - 0x00d361f0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ - 0x00d36200 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d36210 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d36220 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d36230 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ - 0x00d36240 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ - 0x00d36250 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ - 0x00d36260 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ - 0x00d36270 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ - 0x00d36280 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00d36290 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ - 0x00d362a0 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ - 0x00d362b0 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ - 0x00d362c0 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ - 0x00d362d0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ - 0x00d362e0 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ - 0x00d362f0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00d36300 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00d36310 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ - 0x00d36320 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d36330 20666c6f 6174204c 203d2064 6f742874 float L = dot(t │ │ │ │ - 0x00d36340 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00d36350 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ - 0x00d36360 72647329 2e726762 2c206b57 65696768 rds).rgb, kWeigh │ │ │ │ - 0x00d36370 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ - 0x00d36380 4c6c6566 74203d20 646f7428 74657874 Lleft = dot(text │ │ │ │ - 0x00d36390 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d363a0 765f6f66 66736574 302e7879 292e7267 v_offset0.xy).rg │ │ │ │ - 0x00d363b0 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ - 0x00d363c0 20202066 6c6f6174 204c746f 70203d20 float Ltop = │ │ │ │ - 0x00d363d0 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ - 0x00d363e0 6c6f7254 65782c20 765f6f66 66736574 lorTex, v_offset │ │ │ │ - 0x00d363f0 302e7a77 292e7267 622c206b 57656967 0.zw).rgb, kWeig │ │ │ │ - 0x00d36400 68747329 3b200a20 20202076 65633420 hts); . vec4 │ │ │ │ - 0x00d36410 64656c74 613b200a 20202020 64656c74 delta; . delt │ │ │ │ - 0x00d36420 612e7879 203d2061 6273284c 202d2076 a.xy = abs(L - v │ │ │ │ - 0x00d36430 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ - 0x00d36440 293b200a 20202020 76656332 20656467 ); . vec2 edg │ │ │ │ - 0x00d36450 6573203d 20737465 70286b54 68726573 es = step(kThres │ │ │ │ - 0x00d36460 686f6c64 2c206465 6c74612e 7879293b hold, delta.xy); │ │ │ │ - 0x00d36470 200a2020 20206966 2028646f 74286564 . if (dot(ed │ │ │ │ - 0x00d36480 6765732c 20766563 3228312e 302c2031 ges, vec2(1.0, 1 │ │ │ │ - 0x00d36490 2e302929 203d3d20 302e3029 200a2020 .0)) == 0.0) . │ │ │ │ - 0x00d364a0 20202020 20206469 73636172 643b200a discard; . │ │ │ │ - 0x00d364b0 20202020 666c6f61 74204c72 69676874 float Lright │ │ │ │ - 0x00d364c0 203d2064 6f742874 65787475 72652875 = dot(texture(u │ │ │ │ - 0x00d364d0 5f636f6c 6f725465 782c2076 5f6f6666 _colorTex, v_off │ │ │ │ - 0x00d364e0 73657431 2e787929 2e726762 2c206b57 set1.xy).rgb, kW │ │ │ │ - 0x00d364f0 65696768 7473293b 200a2020 2020666c eights); . fl │ │ │ │ - 0x00d36500 6f617420 4c626f74 746f6d20 203d2064 oat Lbottom = d │ │ │ │ - 0x00d36510 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ - 0x00d36520 6f725465 782c2076 5f6f6666 73657431 orTex, v_offset1 │ │ │ │ - 0x00d36530 2e7a7729 2e726762 2c206b57 65696768 .zw).rgb, kWeigh │ │ │ │ - 0x00d36540 7473293b 200a2020 20206465 6c74612e ts); . delta. │ │ │ │ - 0x00d36550 7a77203d 20616273 284c202d 20766563 zw = abs(L - vec │ │ │ │ - 0x00d36560 32284c72 69676874 2c204c62 6f74746f 2(Lright, Lbotto │ │ │ │ - 0x00d36570 6d29293b 200a2020 20207665 6332206d m)); . vec2 m │ │ │ │ - 0x00d36580 61784465 6c746120 3d206d61 78286465 axDelta = max(de │ │ │ │ - 0x00d36590 6c74612e 78792c20 64656c74 612e7a77 lta.xy, delta.zw │ │ │ │ - 0x00d365a0 293b200a 20202020 666c6f61 74204c6c ); . float Ll │ │ │ │ - 0x00d365b0 6566746c 65667420 3d20646f 74287465 eftleft = dot(te │ │ │ │ - 0x00d365c0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00d365d0 2c20765f 6f666673 6574322e 7879292e , v_offset2.xy). │ │ │ │ - 0x00d365e0 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ - 0x00d365f0 0a202020 20666c6f 6174204c 746f7074 . float Ltopt │ │ │ │ - 0x00d36600 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ - 0x00d36610 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ - 0x00d36620 66667365 74322e7a 77292e72 67622c20 ffset2.zw).rgb, │ │ │ │ - 0x00d36630 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ - 0x00d36640 64656c74 612e7a77 203d2061 62732876 delta.zw = abs(v │ │ │ │ - 0x00d36650 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ - 0x00d36660 202d2076 65633228 4c6c6566 746c6566 - vec2(Lleftlef │ │ │ │ - 0x00d36670 742c204c 746f7074 6f702929 3b200a20 t, Ltoptop)); . │ │ │ │ - 0x00d36680 2020206d 61784465 6c746120 3d206d61 maxDelta = ma │ │ │ │ - 0x00d36690 78286d61 7844656c 74612e78 792c2064 x(maxDelta.xy, d │ │ │ │ - 0x00d366a0 656c7461 2e7a7729 3b200a20 20202066 elta.zw); . f │ │ │ │ - 0x00d366b0 6c6f6174 2066696e 616c4465 6c746120 loat finalDelta │ │ │ │ - 0x00d366c0 3d206d61 78286d61 7844656c 74612e78 = max(maxDelta.x │ │ │ │ - 0x00d366d0 2c206d61 7844656c 74612e79 293b200a , maxDelta.y); . │ │ │ │ - 0x00d366e0 20202020 65646765 73202a3d 20737465 edges *= ste │ │ │ │ - 0x00d366f0 70286669 6e616c44 656c7461 2c20534d p(finalDelta, SM │ │ │ │ - 0x00d36700 41415f4c 4f43414c 5f434f4e 54524153 AA_LOCAL_CONTRAS │ │ │ │ - 0x00d36710 545f4144 41505441 54494f4e 5f464143 T_ADAPTATION_FAC │ │ │ │ - 0x00d36720 544f5220 2a206465 6c74612e 7879293b TOR * delta.xy); │ │ │ │ - 0x00d36730 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ - 0x00d36740 72203d20 76656334 28656467 65732c20 r = vec4(edges, │ │ │ │ - 0x00d36750 302e302c 20312e30 293b200a 20207d20 0.0, 1.0); . } │ │ │ │ - 0x00d36760 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d36770 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d36780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d36790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d367a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d367b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d367c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d367d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d367e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d367f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d36800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d36810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d36820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d36830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d36840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d36850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d36860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d36870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d36880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d36890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d368a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d368b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d368c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d368d0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d368e0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d368f0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d36900 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d36910 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00d36920 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ - 0x00d36930 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ - 0x00d36940 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ - 0x00d36950 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d36960 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ - 0x00d36970 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ - 0x00d36980 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d36990 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d369a0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d369b0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d369c0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d369d0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d369e0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d369f0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d36a00 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d36a10 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d36a20 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d36a30 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d36a40 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d36a50 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d36a60 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d36a70 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d36a80 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d36a90 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d36aa0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d36ab0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d36ac0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d36ad0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d36ae0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d36af0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d36b00 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d36b10 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d36b20 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d36b30 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d36b40 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d36b50 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d36b60 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d36b70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d36b80 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d36b90 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d36ba0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d36bb0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d36bc0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d36bd0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d36be0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d36bf0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d36c00 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d36c10 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d36c20 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d36c30 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d36c40 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d36c50 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d36c60 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d36c70 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d36c80 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d36c90 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d36ca0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d36cb0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d36cc0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d36cd0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d36ce0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d36cf0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d36d00 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d36d10 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d36d20 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d36d30 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d36d40 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d36d50 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d36d60 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d36d70 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d36d80 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d36d90 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d36da0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d36db0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d36dc0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d36dd0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d36de0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d36df0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d36e00 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d36e10 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d36e20 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d36e30 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d36e40 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d36e50 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d36e60 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d36e70 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d36e80 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d36e90 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d36ea0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d36eb0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d36ec0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d36ed0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d36ee0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d36ef0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d36f00 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d36f10 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ - 0x00d36f20 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ - 0x00d36f30 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ - 0x00d36f40 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ - 0x00d36f50 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00d36f60 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ - 0x00d36f70 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ - 0x00d36f80 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ - 0x00d36f90 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ - 0x00d36fa0 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ - 0x00d36fb0 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ - 0x00d36fc0 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ - 0x00d36fd0 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ - 0x00d36fe0 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ - 0x00d36ff0 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ - 0x00d37000 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00d37010 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ - 0x00d37020 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ - 0x00d37030 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ - 0x00d37040 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ - 0x00d37050 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ - 0x00d37060 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00d37070 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00d37080 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d37090 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d370a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d370b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d370c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d370d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d370e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d370f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d37100 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d37110 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d37120 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d37130 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d37140 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d37150 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d37160 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d37170 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d37180 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d37190 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d371a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d371b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d371c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d371d0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d371e0 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ - 0x00d371f0 765f6f66 66736574 3b200a20 206f7574 v_offset; . out │ │ │ │ - 0x00d37200 20766563 3420765f 46726167 436f6c6f vec4 v_FragColo │ │ │ │ - 0x00d37210 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d37220 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ - 0x00d37230 4d657472 6963733b 200a2020 756e6966 Metrics; . unif │ │ │ │ - 0x00d37240 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00d37250 636f6c6f 72546578 3b200a20 20756e69 colorTex; . uni │ │ │ │ - 0x00d37260 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00d37270 5f626c65 6e64696e 67576569 67687454 _blendingWeightT │ │ │ │ - 0x00d37280 65783b20 0a202023 64656669 6e652053 ex; . #define S │ │ │ │ - 0x00d37290 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ - 0x00d372a0 726f2874 65782c20 636f6f72 64292074 ro(tex, coord) t │ │ │ │ - 0x00d372b0 65787475 72654c6f 64287465 782c2063 extureLod(tex, c │ │ │ │ - 0x00d372c0 6f6f7264 2c20302e 3029200a 2020636f oord, 0.0) . co │ │ │ │ - 0x00d372d0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d372e0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d372f0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d37300 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d37310 65633420 613b200a 20202020 612e7820 ec4 a; . a.x │ │ │ │ - 0x00d37320 3d207465 78747572 6528755f 626c656e = texture(u_blen │ │ │ │ - 0x00d37330 64696e67 57656967 68745465 782c2076 dingWeightTex, v │ │ │ │ - 0x00d37340 5f6f6666 7365742e 7879292e 613b202f _offset.xy).a; / │ │ │ │ - 0x00d37350 2f205269 67687420 0a202020 20612e79 / Right . a.y │ │ │ │ - 0x00d37360 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ - 0x00d37370 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ - 0x00d37380 765f6f66 66736574 2e7a7729 2e673b20 v_offset.zw).g; │ │ │ │ - 0x00d37390 2f2f2054 6f70200a 20202020 612e777a // Top . a.wz │ │ │ │ - 0x00d373a0 203d2074 65787475 72652875 5f626c65 = texture(u_ble │ │ │ │ - 0x00d373b0 6e64696e 67576569 67687454 65782c20 ndingWeightTex, │ │ │ │ - 0x00d373c0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d373d0 292e787a 3b202f2f 20426f74 746f6d20 ).xz; // Bottom │ │ │ │ - 0x00d373e0 2f204c65 6674200a 20202020 69662028 / Left . if ( │ │ │ │ - 0x00d373f0 646f7428 612c2076 65633428 312e302c dot(a, vec4(1.0, │ │ │ │ - 0x00d37400 20312e30 2c20312e 302c2031 2e302929 1.0, 1.0, 1.0)) │ │ │ │ - 0x00d37410 203c2031 652d3529 200a2020 20207b20 < 1e-5) . { │ │ │ │ - 0x00d37420 0a202020 20202076 5f467261 67436f6c . v_FragCol │ │ │ │ - 0x00d37430 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d37440 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ - 0x00d37450 54657843 6f6f7264 73293b20 0a202020 TexCoords); . │ │ │ │ - 0x00d37460 207d200a 20202020 656c7365 200a2020 } . else . │ │ │ │ - 0x00d37470 20207b20 0a202020 20202076 65633420 { . vec4 │ │ │ │ - 0x00d37480 626c656e 64696e67 4f666673 6574203d blendingOffset = │ │ │ │ - 0x00d37490 20766563 3428302e 302c2061 2e792c20 vec4(0.0, a.y, │ │ │ │ - 0x00d374a0 302e302c 20612e77 293b200a 20202020 0.0, a.w); . │ │ │ │ - 0x00d374b0 20207665 63322062 6c656e64 696e6757 vec2 blendingW │ │ │ │ - 0x00d374c0 65696768 74203d20 612e7977 3b200a20 eight = a.yw; . │ │ │ │ - 0x00d374d0 20202020 20696620 286d6178 28612e78 if (max(a.x │ │ │ │ - 0x00d374e0 2c20612e 7a29203e 206d6178 28612e79 , a.z) > max(a.y │ │ │ │ - 0x00d374f0 2c20612e 77292920 0a202020 2020207b , a.w)) . { │ │ │ │ - 0x00d37500 200a2020 20202020 2020626c 656e6469 . blendi │ │ │ │ - 0x00d37510 6e674f66 66736574 203d2076 65633428 ngOffset = vec4( │ │ │ │ - 0x00d37520 612e782c 20302e30 2c20612e 7a2c2030 a.x, 0.0, a.z, 0 │ │ │ │ - 0x00d37530 2e30293b 200a2020 20202020 2020626c .0); . bl │ │ │ │ - 0x00d37540 656e6469 6e675765 69676874 203d2061 endingWeight = a │ │ │ │ - 0x00d37550 2e787a3b 200a2020 20202020 7d200a20 .xz; . } . │ │ │ │ - 0x00d37560 20202020 20626c65 6e64696e 67576569 blendingWei │ │ │ │ - 0x00d37570 67687420 2f3d2064 6f742862 6c656e64 ght /= dot(blend │ │ │ │ - 0x00d37580 696e6757 65696768 742c2076 65633228 ingWeight, vec2( │ │ │ │ - 0x00d37590 312e302c 20312e30 29293b20 0a202020 1.0, 1.0)); . │ │ │ │ - 0x00d375a0 20202076 65633420 6263203d 20626c65 vec4 bc = ble │ │ │ │ - 0x00d375b0 6e64696e 674f6666 73657420 2a207665 ndingOffset * ve │ │ │ │ - 0x00d375c0 63342875 5f667261 6d656275 66666572 c4(u_framebuffer │ │ │ │ - 0x00d375d0 4d657472 6963732e 78792c20 2d755f66 Metrics.xy, -u_f │ │ │ │ - 0x00d375e0 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ - 0x00d375f0 732e7879 293b200a 20202020 20206263 s.xy); . bc │ │ │ │ - 0x00d37600 202b3d20 765f636f 6c6f7254 6578436f += v_colorTexCo │ │ │ │ - 0x00d37610 6f726473 2e787978 793b200a 20202020 ords.xyxy; . │ │ │ │ - 0x00d37620 20207665 63342063 6f6c6f72 203d2062 vec4 color = b │ │ │ │ - 0x00d37630 6c656e64 696e6757 65696768 742e7820 lendingWeight.x │ │ │ │ - 0x00d37640 2a20534d 41415361 6d706c65 4c657665 * SMAASampleLeve │ │ │ │ - 0x00d37650 6c5a6572 6f28755f 636f6c6f 72546578 lZero(u_colorTex │ │ │ │ - 0x00d37660 2c206263 2e787929 3b200a20 20202020 , bc.xy); . │ │ │ │ - 0x00d37670 20636f6c 6f72202b 3d20626c 656e6469 color += blendi │ │ │ │ - 0x00d37680 6e675765 69676874 2e79202a 20534d41 ngWeight.y * SMA │ │ │ │ - 0x00d37690 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ - 0x00d376a0 28755f63 6f6c6f72 5465782c 2062632e (u_colorTex, bc. │ │ │ │ - 0x00d376b0 7a77293b 200a2020 20202020 765f4672 zw); . v_Fr │ │ │ │ - 0x00d376c0 6167436f 6c6f7220 3d20636f 6c6f723b agColor = color; │ │ │ │ - 0x00d376d0 200a2020 20207d20 0a20207d 200a0000 . } . } ... │ │ │ │ - 0x00d376e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d376f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d37700 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d37710 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d37720 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d37730 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d37740 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d37750 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d37760 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d37770 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d37780 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d37790 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d377a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d377b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d377c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d377d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d377e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d377f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d37800 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d37810 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d37820 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d37830 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00d37840 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00d37850 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00d37860 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d37870 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00d37880 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ - 0x00d37890 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ - 0x00d378a0 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ - 0x00d378b0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d378c0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d378d0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00d378e0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00d378f0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d37900 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d37910 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d37920 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00d37930 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d37940 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00d37950 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00d37960 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00d37970 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d37980 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00d37990 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d379a0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00d379b0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d379c0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00d379d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d379e0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00d379f0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00d37a00 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d37a10 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d37a20 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00d37a30 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00d37a40 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d37a50 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00d37a60 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00d37a70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d37a80 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d37a90 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d37aa0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d37ab0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00d37ac0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d37ad0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d37ae0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d37af0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d37b00 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00d37b10 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00d37b20 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00d37b30 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00d37b40 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00d37b50 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d37b60 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00d37b70 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00d37b80 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d37b90 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00d37ba0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00d37bb0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d37bc0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00d37bd0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00d37be0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00d37bf0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d37c00 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00d37c10 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00d37c20 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00d37c30 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00d37c40 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00d37c50 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00d37c60 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00d37c70 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00d37c80 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00d37c90 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00d37ca0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00d37cb0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00d37cc0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d37cd0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00d37ce0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00d37cf0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00d37d00 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00d37d10 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00d37d20 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00d37d30 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00d37d40 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00d37d50 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00d37d60 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00d37d70 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00d37d80 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d37d90 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00d37da0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d37db0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00d37dc0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00d37dd0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00d37de0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00d37df0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00d37e00 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00d37e10 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d37e20 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d37e30 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00d37e40 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ - 0x00d37e50 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00d37e60 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ - 0x00d37e70 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ - 0x00d37e80 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00d37e90 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ - 0x00d37ea0 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ - 0x00d37eb0 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ - 0x00d37ec0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d37ed0 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ - 0x00d37ee0 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ - 0x00d37ef0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d37f00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d37f10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d37f20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d37f30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d37f40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d37f50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d37f60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d37f70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d37f80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d37f90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d37fa0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d37fb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d37fc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d37fd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d37fe0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d37ff0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d38000 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d38010 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d38020 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d38030 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d38040 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d38050 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d38060 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d38070 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d38080 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d38090 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00d380a0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d380b0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d380c0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ - 0x00d380d0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00d380e0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d380f0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00d38100 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d38110 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ - 0x00d38120 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ - 0x00d38130 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ - 0x00d38140 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00d38150 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ - 0x00d38160 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d38170 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ - 0x00d38180 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00d38190 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00d381a0 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ - 0x00d381b0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ - 0x00d381c0 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ - 0x00d381d0 6c696e65 50617373 3b200a20 20636f6e linePass; . con │ │ │ │ - 0x00d381e0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d381f0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d38200 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d38210 6e282920 0a20207b 200a2020 23696664 n() . { . #ifd │ │ │ │ - 0x00d38220 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ - 0x00d38230 2020204c 4f575f50 20766563 34206669 LOW_P vec4 fi │ │ │ │ - 0x00d38240 6e616c43 6f6c6f72 203d2076 5f636f6c nalColor = v_col │ │ │ │ - 0x00d38250 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ - 0x00d38260 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ - 0x00d38270 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ - 0x00d38280 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d38290 636f6c6f 72546578 436f6f72 6473293b colorTexCoords); │ │ │ │ - 0x00d382a0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d382b0 66696e61 6c436f6c 6f722e61 202a3d20 finalColor.a *= │ │ │ │ - 0x00d382c0 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ - 0x00d382d0 765f4672 6167436f 6c6f7220 3d206669 v_FragColor = fi │ │ │ │ - 0x00d382e0 6e616c43 6f6c6f72 3b200a20 207d200a nalColor; . } . │ │ │ │ - 0x00d382f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d38300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d38310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d38320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d38330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d38340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d38350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d38360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d38370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d38380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d38390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d383a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d383b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d383c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d383d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d383e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d383f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d38400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d38410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d38420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d38430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d38440 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d38450 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d38460 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d38470 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d38480 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d38490 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d384a0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d384b0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d384c0 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ - 0x00d384d0 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ - 0x00d384e0 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00d384f0 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ - 0x00d38500 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ - 0x00d38510 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ - 0x00d38520 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ - 0x00d38530 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d38540 206d6174 3420755f 7069766f 74547261 mat4 u_pivotTra │ │ │ │ - 0x00d38550 6e73666f 726d3b20 0a202075 6e69666f nsform; . unifo │ │ │ │ - 0x00d38560 726d2076 65633220 755f636f 6e747261 rm vec2 u_contra │ │ │ │ - 0x00d38570 73744761 6d6d613b 200a2020 756e6966 stGamma; . unif │ │ │ │ - 0x00d38580 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00d38590 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ - 0x00d385a0 666c6f61 7420755f 7a536361 6c653b20 float u_zScale; │ │ │ │ - 0x00d385b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d385c0 20755f69 6e746572 706f6c61 74696f6e u_interpolation │ │ │ │ - 0x00d385d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d385e0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d385f0 73733b20 0a202075 6e69666f 726d2073 ss; . uniform s │ │ │ │ - 0x00d38600 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ - 0x00d38610 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00d38620 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d38630 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d38640 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ - 0x00d38650 207b200a 20202369 66646566 20454e41 { . #ifdef ENA │ │ │ │ - 0x00d38660 424c455f 56544620 0a202020 204c4f57 BLE_VTF . LOW │ │ │ │ - 0x00d38670 5f502076 65633420 676c7970 68436f6c _P vec4 glyphCol │ │ │ │ - 0x00d38680 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ - 0x00d38690 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ - 0x00d386a0 50207665 63342067 6c797068 436f6c6f P vec4 glyphColo │ │ │ │ - 0x00d386b0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00d386c0 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ - 0x00d386d0 6578436f 6f726429 3b200a20 2023656e exCoord); . #en │ │ │ │ - 0x00d386e0 64696620 0a202020 20666c6f 61742064 dif . float d │ │ │ │ - 0x00d386f0 69737420 3d207465 78747572 6528755f ist = texture(u_ │ │ │ │ - 0x00d38700 6d61736b 5465782c 20765f6d 61736b54 maskTex, v_maskT │ │ │ │ - 0x00d38710 6578436f 6f726429 2e723b20 0a202020 exCoord).r; . │ │ │ │ - 0x00d38720 20666c6f 61742061 6c706861 203d2073 float alpha = s │ │ │ │ - 0x00d38730 6d6f6f74 68737465 7028755f 636f6e74 moothstep(u_cont │ │ │ │ - 0x00d38740 72617374 47616d6d 612e7820 2d20755f rastGamma.x - u_ │ │ │ │ - 0x00d38750 636f6e74 72617374 47616d6d 612e792c contrastGamma.y, │ │ │ │ - 0x00d38760 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ - 0x00d38770 2e78202b 20755f63 6f6e7472 61737447 .x + u_contrastG │ │ │ │ - 0x00d38780 616d6d61 2e792c20 64697374 29202a20 amma.y, dist) * │ │ │ │ - 0x00d38790 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ - 0x00d387a0 676c7970 68436f6c 6f722e61 202a3d20 glyphColor.a *= │ │ │ │ - 0x00d387b0 616c7068 613b200a 20202020 765f4672 alpha; . v_Fr │ │ │ │ - 0x00d387c0 6167436f 6c6f7220 3d20676c 79706843 agColor = glyphC │ │ │ │ - 0x00d387d0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d387e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d387f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d38800 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d38810 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d38820 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d38830 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d38840 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d38850 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d38860 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d38870 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d38880 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d38890 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d388a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d388b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d388c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d388d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d388e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d388f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d38900 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d38910 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d38920 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d38930 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d38940 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d38950 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d38960 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00d38970 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00d38980 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00d38990 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d389a0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00d389b0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00d389c0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00d389d0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00d389e0 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00d389f0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d38a00 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00d38a10 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d38a20 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d38a30 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d38a40 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d38a50 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d38a60 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d38a70 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d38a80 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d38a90 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d38aa0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d38ab0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d38ac0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d38ad0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d38ae0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d38af0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d38b00 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d38b10 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ - 0x00d38b20 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ - 0x00d38b30 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ - 0x00d38b40 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d38b50 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d38b60 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00d38b70 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00d38b80 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d38b90 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d38ba0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d38bb0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00d38bc0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d38bd0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d38be0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00d38bf0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d38c00 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00d38c10 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00d38c20 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00d38c30 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00d38c40 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00d38c50 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00d38c60 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d38c70 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00d38c80 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d38c90 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00d38ca0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00d38cb0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00d38cc0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00d38cd0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00d38ce0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00d38cf0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d38d00 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00d38d10 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00d38d20 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d38d30 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00d38d40 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00d38d50 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00d38d60 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00d38d70 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d38d80 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d38d90 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d38da0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00d38db0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00d38dc0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00d38dd0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00d38de0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d38df0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d38e00 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d38e10 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00d38e20 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00d38e30 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00d38e40 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00d38e50 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00d38e60 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00d38e70 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00d38e80 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00d38e90 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00d38ea0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d38eb0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00d38ec0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00d38ed0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00d38ee0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00d38ef0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d38f00 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00d38f10 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00d38f20 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00d38f30 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00d38f40 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00d38f50 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d38f60 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00d38f70 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00d38f80 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d38f90 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00d38fa0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d38fb0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00d38fc0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00d38fd0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00d38fe0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00d38ff0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00d39000 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00d39010 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00d39020 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00d39030 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00d39040 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00d39050 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00d39060 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00d39070 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00d39080 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00d39090 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00d390a0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00d390b0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d390c0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00d390d0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00d390e0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00d390f0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00d39100 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ - 0x00d39110 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ - 0x00d39120 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ - 0x00d39130 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ - 0x00d39140 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ - 0x00d39150 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00d39160 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d39170 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ - 0x00d39180 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00d39190 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d391a0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d391b0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00d391c0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00d391d0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00d391e0 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ - 0x00d391f0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00d39200 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00d39210 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00d39220 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d39230 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ - 0x00d39240 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ - 0x00d39250 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d39260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d39270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d39280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d39290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d392a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d392b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d392c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d392d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d392e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d392f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d39300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d39310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d39320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d39330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d39340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d39350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d39360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d39370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d39380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d39390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d393a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d393b0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d393c0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d393d0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d393e0 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00d393f0 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00d39400 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00d39410 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d39420 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00d39430 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00d39440 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00d39450 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00d39460 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00d39470 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d39480 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00d39490 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d394a0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d394b0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d394c0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d394d0 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d394e0 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d394f0 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d39500 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d39510 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d39520 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d39530 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d39540 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d39550 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d39560 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d39570 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d39580 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d39590 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d395a0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d395b0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d395c0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d395d0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d395e0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d395f0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d39600 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d39610 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d39620 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d39630 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d39640 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d39650 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d39660 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d39670 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d39680 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d39690 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d396a0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d396b0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d396c0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d396d0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d396e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d396f0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d39700 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d39710 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d39720 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d39730 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d39740 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d39750 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d39760 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d39770 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d39780 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d39790 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d397a0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d397b0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d397c0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d397d0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d397e0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d397f0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d39800 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d39810 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d39820 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d39830 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d39840 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d39850 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d39860 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d39870 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d39880 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d39890 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d398a0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d398b0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d398c0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d398d0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d398e0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d398f0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d39900 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d39910 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d39920 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d39930 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d39940 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d39950 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d39960 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d39970 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d39980 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d39990 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d399a0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d399b0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d399c0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d399d0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d399e0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d399f0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d39a00 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d39a10 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d39a20 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d39a30 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d39a40 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d39a50 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d39a60 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d39a70 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d39a80 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d39a90 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d39aa0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d39ab0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d39ac0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d39ad0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d39ae0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d39af0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d39b00 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d39b10 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d39b20 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d39b30 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d39b40 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00d39b50 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00d39b60 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00d39b70 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00d39b80 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00d39b90 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00d39ba0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d39bb0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00d39bc0 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00d39bd0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d39be0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00d39bf0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d39c00 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00d39c10 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d39c20 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d39c30 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00d39c40 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00d39c50 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00d39c60 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00d39c70 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00d39c80 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00d39c90 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00d39ca0 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ - 0x00d39cb0 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ - 0x00d39cc0 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ - 0x00d39cd0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d39ce0 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00d39cf0 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00d39d00 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d39d10 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d39d20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d39d30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d39d40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d39d50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d39d60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d39d70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d39d80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d39d90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d39da0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d39db0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d39dc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d39dd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d39de0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d39df0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d39e00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d39e10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d39e20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d39e30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d39e40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d39e50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d39e60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d39e70 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d39e80 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d39e90 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00d39ea0 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00d39eb0 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00d39ec0 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00d39ed0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00d39ee0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00d39ef0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d39f00 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d39f10 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d39f20 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d39f30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d39f40 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d39f50 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d39f60 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d39f70 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d39f80 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d39f90 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d39fa0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d39fb0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d39fc0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d39fd0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d39fe0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d39ff0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d3a000 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d3a010 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d3a020 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d3a030 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d3a040 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d3a050 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d3a060 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ - 0x00d3a070 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ - 0x00d3a080 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00d3a090 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ - 0x00d3a0a0 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ - 0x00d3a0b0 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ - 0x00d3a0c0 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ - 0x00d3a0d0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d3a0e0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d3a0f0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d3a100 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d3a110 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d3a120 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d3a130 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d3a140 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d3a150 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d3a160 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d3a170 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d3a180 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d3a190 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d3a1a0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d3a1b0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d3a1c0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d3a1d0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d3a1e0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d3a1f0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d3a200 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d3a210 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d3a220 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d3a230 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d3a240 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d3a250 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d3a260 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d3a270 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d3a280 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d3a290 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d3a2a0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d3a2b0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d3a2c0 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d3a2d0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d3a2e0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d3a2f0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d3a300 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d3a310 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d3a320 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d3a330 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d3a340 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d3a350 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d3a360 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d3a370 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d3a380 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d3a390 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d3a3a0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d3a3b0 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d3a3c0 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d3a3d0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d3a3e0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d3a3f0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d3a400 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d3a410 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d3a420 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d3a430 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d3a440 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d3a450 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d3a460 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d3a470 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d3a480 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d3a490 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d3a4a0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d3a4b0 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d3a4c0 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d3a4d0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d3a4e0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d3a4f0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d3a500 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d3a510 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d3a520 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d3a530 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d3a540 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d3a550 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d3a560 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d3a570 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d3a580 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d3a590 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d3a5a0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d3a5b0 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d3a5c0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d3a5d0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d3a5e0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d3a5f0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d3a600 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d3a610 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d3a620 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d3a630 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d3a640 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d3a650 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d3a660 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ - 0x00d3a670 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ - 0x00d3a680 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ - 0x00d3a690 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ - 0x00d3a6a0 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ - 0x00d3a6b0 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ - 0x00d3a6c0 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ - 0x00d3a6d0 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ - 0x00d3a6e0 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ - 0x00d3a6f0 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ - 0x00d3a700 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ - 0x00d3a710 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ - 0x00d3a720 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ - 0x00d3a730 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ - 0x00d3a740 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ - 0x00d3a750 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ - 0x00d3a760 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ - 0x00d3a770 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ - 0x00d3a780 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ - 0x00d3a790 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d3a7a0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d3a7b0 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ - 0x00d3a7c0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d3a7d0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d3a7e0 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ - 0x00d3a7f0 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ - 0x00d3a800 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ - 0x00d3a810 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ - 0x00d3a820 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ - 0x00d3a830 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ - 0x00d3a840 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d3a850 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ - 0x00d3a860 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d3a870 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ - 0x00d3a880 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ - 0x00d3a890 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ - 0x00d3a8a0 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ - 0x00d3a8b0 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ - 0x00d3a8c0 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ - 0x00d3a8d0 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ - 0x00d3a8e0 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ - 0x00d3a8f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d3a900 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3a910 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3a920 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3a930 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3a940 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3a950 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3a960 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3a970 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3a980 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3a990 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3a9a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3a9b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3a9c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3a9d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3a9e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3a9f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3aa00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3aa10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3aa20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3aa30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3aa40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3aa50 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d3aa60 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d3aa70 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00d3aa80 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00d3aa90 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00d3aaa0 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00d3aab0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00d3aac0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00d3aad0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d3aae0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d3aaf0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d3ab00 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d3ab10 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d3ab20 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d3ab30 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d3ab40 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d3ab50 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d3ab60 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d3ab70 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d3ab80 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d3ab90 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d3aba0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d3abb0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d3abc0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d3abd0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d3abe0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d3abf0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d3ac00 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d3ac10 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d3ac20 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d3ac30 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d3ac40 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ - 0x00d3ac50 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ - 0x00d3ac60 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00d3ac70 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ - 0x00d3ac80 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ - 0x00d3ac90 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d3aca0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d3acb0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00d3acc0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d3acd0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d3ace0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d3acf0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d3ad00 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00d3ad10 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d3ad20 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00d3ad30 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00d3ad40 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d3ad50 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d3ad60 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00d3ad70 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d3ad80 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d3ad90 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00d3ada0 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00d3adb0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d3adc0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00d3add0 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00d3ade0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d3adf0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00d3ae00 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00d3ae10 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d3ae20 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d3ae30 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00d3ae40 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d3ae50 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00d3ae60 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00d3ae70 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d3ae80 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00d3ae90 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00d3aea0 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00d3aeb0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00d3aec0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d3aed0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d3aee0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d3aef0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00d3af00 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00d3af10 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00d3af20 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00d3af30 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d3af40 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00d3af50 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00d3af60 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d3af70 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00d3af80 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00d3af90 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d3afa0 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00d3afb0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00d3afc0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00d3afd0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d3afe0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00d3aff0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00d3b000 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00d3b010 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00d3b020 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00d3b030 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00d3b040 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d3b050 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00d3b060 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00d3b070 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00d3b080 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00d3b090 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00d3b0a0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d3b0b0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00d3b0c0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00d3b0d0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00d3b0e0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00d3b0f0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00d3b100 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00d3b110 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00d3b120 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00d3b130 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00d3b140 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00d3b150 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00d3b160 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00d3b170 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00d3b180 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00d3b190 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00d3b1a0 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00d3b1b0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d3b1c0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00d3b1d0 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00d3b1e0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00d3b1f0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00d3b200 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d3b210 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00d3b220 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ - 0x00d3b230 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ - 0x00d3b240 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ - 0x00d3b250 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ - 0x00d3b260 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ - 0x00d3b270 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ - 0x00d3b280 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ - 0x00d3b290 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ - 0x00d3b2a0 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ - 0x00d3b2b0 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ - 0x00d3b2c0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00d3b2d0 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ - 0x00d3b2e0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00d3b2f0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00d3b300 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00d3b310 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00d3b320 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d3b330 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d3b340 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d3b350 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00d3b360 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00d3b370 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d3b380 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00d3b390 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d3b3a0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d3b3b0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00d3b3c0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00d3b3d0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00d3b3e0 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ - 0x00d3b3f0 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ - 0x00d3b400 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ - 0x00d3b410 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ - 0x00d3b420 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ - 0x00d3b430 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00d3b440 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ - 0x00d3b450 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00d3b460 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ - 0x00d3b470 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00d3b480 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d3b490 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ - 0x00d3b4a0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d3b4b0 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ - 0x00d3b4c0 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ - 0x00d3b4d0 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ - 0x00d3b4e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3b4f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3b500 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3b510 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3b520 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3b530 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3b540 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3b550 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3b560 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3b570 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3b580 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3b590 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3b5a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3b5b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3b5c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3b5d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3b5e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3b5f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3b600 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3b610 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3b620 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00d3b630 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00d3b640 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00d3b650 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00d3b660 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00d3b670 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ - 0x00d3b680 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d3b690 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ - 0x00d3b6a0 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ - 0x00d3b6b0 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ - 0x00d3b6c0 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00d3b6d0 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ - 0x00d3b6e0 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ - 0x00d3b6f0 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ - 0x00d3b700 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ - 0x00d3b710 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d3b720 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ - 0x00d3b730 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ - 0x00d3b740 6d207665 63322075 5f706f73 6974696f m vec2 u_positio │ │ │ │ - 0x00d3b750 6e3b200a 2020756e 69666f72 6d20666c n; . uniform fl │ │ │ │ - 0x00d3b760 6f617420 755f6973 4f75746c 696e6550 oat u_isOutlineP │ │ │ │ - 0x00d3b770 6173733b 200a2020 756e6966 6f726d20 ass; . uniform │ │ │ │ - 0x00d3b780 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d3b790 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d3b7a0 7420755f 6c656e67 74683b20 0a202075 t u_length; . u │ │ │ │ - 0x00d3b7b0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ - 0x00d3b7c0 20755f6d 61736b54 65783b20 0a202063 u_maskTex; . c │ │ │ │ - 0x00d3b7d0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d3b7e0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d3b7f0 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ - 0x00d3b800 61696e28 29200a20 207b200a 20202369 ain() . { . #i │ │ │ │ - 0x00d3b810 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d3b820 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ - 0x00d3b830 676c7970 68436f6c 6f72203d 20765f63 glyphColor = v_c │ │ │ │ - 0x00d3b840 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ - 0x00d3b850 20202020 4c4f575f 50207665 63342067 LOW_P vec4 g │ │ │ │ - 0x00d3b860 6c797068 436f6c6f 72203d20 74657874 lyphColor = text │ │ │ │ - 0x00d3b870 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d3b880 765f636f 6c6f7254 6578436f 6f726429 v_colorTexCoord) │ │ │ │ - 0x00d3b890 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d3b8a0 20666c6f 61742064 69737420 3d207465 float dist = te │ │ │ │ - 0x00d3b8b0 78747572 6528755f 6d61736b 5465782c xture(u_maskTex, │ │ │ │ - 0x00d3b8c0 20765f6d 61736b54 6578436f 6f726429 v_maskTexCoord) │ │ │ │ - 0x00d3b8d0 2e723b20 0a202020 20666c6f 61742061 .r; . float a │ │ │ │ - 0x00d3b8e0 6c706861 203d2073 6d6f6f74 68737465 lpha = smoothste │ │ │ │ - 0x00d3b8f0 7028755f 636f6e74 72617374 47616d6d p(u_contrastGamm │ │ │ │ - 0x00d3b900 612e7820 2d20755f 636f6e74 72617374 a.x - u_contrast │ │ │ │ - 0x00d3b910 47616d6d 612e792c 20755f63 6f6e7472 Gamma.y, u_contr │ │ │ │ - 0x00d3b920 61737447 616d6d61 2e78202b 20755f63 astGamma.x + u_c │ │ │ │ - 0x00d3b930 6f6e7472 61737447 616d6d61 2e792c20 ontrastGamma.y, │ │ │ │ - 0x00d3b940 64697374 29202a20 755f6f70 61636974 dist) * u_opacit │ │ │ │ - 0x00d3b950 793b200a 20202020 676c7970 68436f6c y; . glyphCol │ │ │ │ - 0x00d3b960 6f722e61 202a3d20 616c7068 613b200a or.a *= alpha; . │ │ │ │ - 0x00d3b970 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ - 0x00d3b980 3d20676c 79706843 6f6c6f72 3b200a20 = glyphColor; . │ │ │ │ - 0x00d3b990 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d3b9a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3b9b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3b9c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3b9d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3b9e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3b9f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3ba00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3ba10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3ba20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3ba30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3ba40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3ba50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3ba60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3ba70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3ba80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3ba90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3baa0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3bab0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3bac0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3bad0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3bae0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3baf0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d3bb00 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d3bb10 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ - 0x00d3bb20 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ - 0x00d3bb30 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d3bb40 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ - 0x00d3bb50 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ - 0x00d3bb60 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d3bb70 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d3bb80 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d3bb90 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d3bba0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d3bbb0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d3bbc0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d3bbd0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d3bbe0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d3bbf0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d3bc00 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d3bc10 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d3bc20 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d3bc30 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d3bc40 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d3bc50 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00d3bc60 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d3bc70 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d3bc80 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00d3bc90 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d3bca0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d3bcb0 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ - 0x00d3bcc0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d3bcd0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d3bce0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d3bcf0 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ - 0x00d3bd00 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ - 0x00d3bd10 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ - 0x00d3bd20 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ - 0x00d3bd30 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d3bd40 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d3bd50 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d3bd60 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d3bd70 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d3bd80 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d3bd90 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d3bda0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d3bdb0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d3bdc0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d3bdd0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d3bde0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d3bdf0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d3be00 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d3be10 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d3be20 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d3be30 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d3be40 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d3be50 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d3be60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d3be70 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d3be80 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d3be90 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d3bea0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d3beb0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d3bec0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d3bed0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d3bee0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d3bef0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d3bf00 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d3bf10 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d3bf20 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d3bf30 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d3bf40 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d3bf50 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d3bf60 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d3bf70 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d3bf80 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d3bf90 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d3bfa0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d3bfb0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d3bfc0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d3bfd0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d3bfe0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d3bff0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d3c000 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d3c010 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d3c020 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d3c030 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d3c040 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d3c050 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d3c060 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d3c070 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d3c080 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d3c090 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d3c0a0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d3c0b0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d3c0c0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d3c0d0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d3c0e0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d3c0f0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d3c100 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d3c110 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d3c120 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d3c130 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d3c140 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d3c150 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d3c160 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d3c170 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d3c180 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d3c190 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d3c1a0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d3c1b0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d3c1c0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d3c1d0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d3c1e0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d3c1f0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d3c200 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d3c210 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d3c220 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d3c230 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d3c240 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d3c250 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d3c260 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d3c270 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d3c280 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d3c290 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d3c2a0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d3c2b0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d3c2c0 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ - 0x00d3c2d0 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ - 0x00d3c2e0 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ - 0x00d3c2f0 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ - 0x00d3c300 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ - 0x00d3c310 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ - 0x00d3c320 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ - 0x00d3c330 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ - 0x00d3c340 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ - 0x00d3c350 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ - 0x00d3c360 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ - 0x00d3c370 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ - 0x00d3c380 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ - 0x00d3c390 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ - 0x00d3c3a0 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ - 0x00d3c3b0 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00d3c3c0 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ - 0x00d3c3d0 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ - 0x00d3c3e0 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00d3c3f0 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00d3c400 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00d3c410 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00d3c420 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d3c430 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00d3c440 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00d3c450 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00d3c460 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ - 0x00d3c470 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ - 0x00d3c480 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ - 0x00d3c490 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ - 0x00d3c4a0 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ - 0x00d3c4b0 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ - 0x00d3c4c0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00d3c4d0 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ - 0x00d3c4e0 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ - 0x00d3c4f0 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ - 0x00d3c500 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ - 0x00d3c510 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ - 0x00d3c520 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d3c530 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00d3c540 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00d3c550 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d3c560 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d3c570 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d3c580 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3c590 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3c5a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3c5b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3c5c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3c5d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3c5e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3c5f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3c600 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3c610 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3c620 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3c630 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3c640 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3c650 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3c660 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3c670 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3c680 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3c690 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3c6a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3c6b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3c6c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3c6d0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d3c6e0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d3c6f0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d3c700 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d3c710 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d3c720 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d3c730 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d3c740 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d3c750 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d3c760 69666f72 6d207665 63322075 5f636f6e iform vec2 u_con │ │ │ │ - 0x00d3c770 74726173 7447616d 6d613b20 0a202075 trastGamma; . u │ │ │ │ - 0x00d3c780 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ - 0x00d3c790 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ - 0x00d3c7a0 726d2066 6c6f6174 20755f7a 5363616c rm float u_zScal │ │ │ │ - 0x00d3c7b0 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ - 0x00d3c7c0 6f617420 755f696e 74657270 6f6c6174 oat u_interpolat │ │ │ │ - 0x00d3c7d0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d3c7e0 666c6f61 7420755f 69734f75 746c696e float u_isOutlin │ │ │ │ - 0x00d3c7f0 65506173 733b200a 2020756e 69666f72 ePass; . unifor │ │ │ │ - 0x00d3c800 6d207361 6d706c65 72324420 755f636f m sampler2D u_co │ │ │ │ - 0x00d3c810 6c6f7254 65783b20 0a202063 6f6e7374 lorTex; . const │ │ │ │ - 0x00d3c820 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d3c830 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d3c840 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ - 0x00d3c850 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d3c860 2066696e 616c436f 6c6f7220 3d207465 finalColor = te │ │ │ │ - 0x00d3c870 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00d3c880 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ - 0x00d3c890 6473293b 200a2020 20206669 6e616c43 ds); . finalC │ │ │ │ - 0x00d3c8a0 6f6c6f72 2e61202a 3d20755f 6f706163 olor.a *= u_opac │ │ │ │ - 0x00d3c8b0 6974793b 200a2020 2020765f 46726167 ity; . v_Frag │ │ │ │ - 0x00d3c8c0 436f6c6f 72203d20 66696e61 6c436f6c Color = finalCol │ │ │ │ - 0x00d3c8d0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d3c8e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3c8f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3c900 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3c910 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3c920 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3c930 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3c940 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3c950 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3c960 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3c970 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3c980 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3c990 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3c9a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3c9b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3c9c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3c9d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3c9e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3c9f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3ca00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3ca10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3ca20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3ca30 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d3ca40 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d3ca50 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d3ca60 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d3ca70 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d3ca80 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d3ca90 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d3caa0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d3cab0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d3cac0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d3cad0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d3cae0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d3caf0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d3cb00 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d3cb10 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d3cb20 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d3cb30 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d3cb40 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d3cb50 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d3cb60 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d3cb70 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d3cb80 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d3cb90 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d3cba0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d3cbb0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d3cbc0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d3cbd0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d3cbe0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d3cbf0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d3cc00 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d3cc10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d3cc20 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d3cc30 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d3cc40 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d3cc50 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d3cc60 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d3cc70 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d3cc80 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d3cc90 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d3cca0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d3ccb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d3ccc0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d3ccd0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d3cce0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d3ccf0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d3cd00 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d3cd10 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d3cd20 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d3cd30 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d3cd40 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d3cd50 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d3cd60 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d3cd70 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d3cd80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d3cd90 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d3cda0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d3cdb0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d3cdc0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d3cdd0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d3cde0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d3cdf0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d3ce00 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d3ce10 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d3ce20 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d3ce30 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d3ce40 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d3ce50 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d3ce60 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d3ce70 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d3ce80 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d3ce90 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d3cea0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d3ceb0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d3cec0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d3ced0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d3cee0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d3cef0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d3cf00 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d3cf10 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d3cf20 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d3cf30 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d3cf40 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d3cf50 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d3cf60 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d3cf70 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d3cf80 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d3cf90 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d3cfa0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d3cfb0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d3cfc0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d3cfd0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d3cfe0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d3cff0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d3d000 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d3d010 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d3d020 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d3d030 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d3d040 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d3d050 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d3d060 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d3d070 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d3d080 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d3d090 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d3d0a0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d3d0b0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d3d0c0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d3d0d0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d3d0e0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d3d0f0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d3d100 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d3d110 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d3d120 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d3d130 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00d3d140 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00d3d150 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d3d160 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00d3d170 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ - 0x00d3d180 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ - 0x00d3d190 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00d3d1a0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00d3d1b0 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ - 0x00d3d1c0 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ - 0x00d3d1d0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d3d1e0 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ - 0x00d3d1f0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00d3d200 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00d3d210 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00d3d220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3d230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3d240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3d250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3d260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3d270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3d280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3d290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3d2a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3d2b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3d2c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3d2d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3d2e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3d2f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3d300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3d310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3d320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3d330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3d340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3d350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3d360 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3d370 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d3d380 7264733b 200a2020 696e2066 6c6f6174 rds; . in float │ │ │ │ - 0x00d3d390 20765f69 6e74656e 73697479 3b200a20 v_intensity; . │ │ │ │ - 0x00d3d3a0 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ - 0x00d3d3b0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d3d3c0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d3d3d0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d3d3e0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d3d3f0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d3d400 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d3d410 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d3d420 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d3d430 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d3d440 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d3d450 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d3d460 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d3d470 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d3d480 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d3d490 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d3d4a0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d3d4b0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d3d4c0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d3d4d0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d3d4e0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d3d4f0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d3d500 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d3d510 0a202020 20766563 34206669 6e616c43 . vec4 finalC │ │ │ │ - 0x00d3d520 6f6c6f72 203d2076 65633428 74657874 olor = vec4(text │ │ │ │ - 0x00d3d530 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d3d540 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00d3d550 292e7267 622c2075 5f6f7061 63697479 ).rgb, u_opacity │ │ │ │ - 0x00d3d560 293b200a 20202020 765f4672 6167436f ); . v_FragCo │ │ │ │ - 0x00d3d570 6c6f7220 3d207665 63342828 765f696e lor = vec4((v_in │ │ │ │ - 0x00d3d580 74656e73 69747920 2a20302e 32202b20 tensity * 0.2 + │ │ │ │ - 0x00d3d590 302e3829 202a2066 696e616c 436f6c6f 0.8) * finalColo │ │ │ │ - 0x00d3d5a0 722e7267 622c2066 696e616c 436f6c6f r.rgb, finalColo │ │ │ │ - 0x00d3d5b0 722e6129 3b200a20 207d200a 00000000 r.a); . } ..... │ │ │ │ - 0x00d3d5c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3d5d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3d5e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3d5f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3d600 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3d610 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3d620 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3d630 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3d640 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3d650 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3d660 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3d670 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3d680 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3d690 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3d6a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3d6b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3d6c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3d6d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3d6e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3d6f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3d700 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3d710 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d3d720 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d3d730 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d3d740 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d3d750 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d3d760 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d3d770 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d3d780 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d3d790 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d3d7a0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d3d7b0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d3d7c0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d3d7d0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d3d7e0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d3d7f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d3d800 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d3d810 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d3d820 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d3d830 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d3d840 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d3d850 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d3d860 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d3d870 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d3d880 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d3d890 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d3d8a0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d3d8b0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d3d8c0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d3d8d0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d3d8e0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d3d8f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d3d900 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d3d910 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d3d920 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d3d930 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d3d940 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d3d950 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d3d960 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d3d970 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d3d980 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d3d990 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d3d9a0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d3d9b0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d3d9c0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d3d9d0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d3d9e0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d3d9f0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d3da00 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d3da10 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d3da20 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d3da30 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d3da40 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d3da50 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d3da60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d3da70 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d3da80 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d3da90 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d3daa0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d3dab0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d3dac0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d3dad0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d3dae0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d3daf0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d3db00 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d3db10 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d3db20 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d3db30 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d3db40 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d3db50 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d3db60 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d3db70 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d3db80 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d3db90 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d3dba0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d3dbb0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d3dbc0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d3dbd0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d3dbe0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d3dbf0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d3dc00 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d3dc10 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d3dc20 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d3dc30 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d3dc40 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d3dc50 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d3dc60 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d3dc70 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d3dc80 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d3dc90 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d3dca0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d3dcb0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d3dcc0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d3dcd0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d3dce0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d3dcf0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d3dd00 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d3dd10 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d3dd20 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d3dd30 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d3dd40 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d3dd50 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d3dd60 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d3dd70 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d3dd80 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d3dd90 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d3dda0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d3ddb0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d3ddc0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d3ddd0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d3dde0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d3ddf0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d3de00 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d3de10 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ - 0x00d3de20 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ - 0x00d3de30 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00d3de40 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00d3de50 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00d3de60 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00d3de70 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d3de80 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d3de90 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d3dea0 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00d3deb0 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00d3dec0 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d3ded0 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00d3dee0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d3def0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d3df00 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00d3df10 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00d3df20 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00d3df30 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00d3df40 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00d3df50 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00d3df60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3df70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3df80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3df90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3dfa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3dfb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3dfc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3dfd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3dfe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3dff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3e000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3e010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3e020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3e030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3e040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3e050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3e060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3e070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3e080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3e090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3e0a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3e0b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d3e0c0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d3e0d0 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d3e0e0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d3e0f0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d3e100 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d3e110 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d3e120 6f726d20 76656332 20755f63 6f6e7472 orm vec2 u_contr │ │ │ │ - 0x00d3e130 61737447 616d6d61 3b200a20 20756e69 astGamma; . uni │ │ │ │ - 0x00d3e140 666f726d 20766563 3220755f 706f7369 form vec2 u_posi │ │ │ │ - 0x00d3e150 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d3e160 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d3e170 6e655061 73733b20 0a202075 6e69666f nePass; . unifo │ │ │ │ - 0x00d3e180 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d3e190 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d3e1a0 6c6f6174 20755f6c 656e6774 683b200a loat u_length; . │ │ │ │ - 0x00d3e1b0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00d3e1c0 72324420 755f636f 6c6f7254 65783b20 r2D u_colorTex; │ │ │ │ - 0x00d3e1d0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d3e1e0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d3e1f0 203d2031 3030302e 303b200a 2020766f = 1000.0; . vo │ │ │ │ - 0x00d3e200 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d3e210 20202020 76656334 2066696e 616c436f vec4 finalCo │ │ │ │ - 0x00d3e220 6c6f7220 3d207465 78747572 6528755f lor = texture(u_ │ │ │ │ - 0x00d3e230 636f6c6f 72546578 2c20765f 636f6c6f colorTex, v_colo │ │ │ │ - 0x00d3e240 72546578 436f6f72 6473293b 200a2020 rTexCoords); . │ │ │ │ - 0x00d3e250 20206669 6e616c43 6f6c6f72 2e61202a finalColor.a * │ │ │ │ - 0x00d3e260 3d20755f 6f706163 6974793b 200a2020 = u_opacity; . │ │ │ │ - 0x00d3e270 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d3e280 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d3e290 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d3e2a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3e2b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3e2c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3e2d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3e2e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3e2f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3e300 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3e310 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3e320 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3e330 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3e340 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3e350 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3e360 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3e370 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3e380 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3e390 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3e3a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3e3b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3e3c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3e3d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3e3e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3e3f0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d3e400 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d3e410 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ - 0x00d3e420 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ - 0x00d3e430 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ - 0x00d3e440 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d3e450 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d3e460 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d3e470 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d3e480 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d3e490 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d3e4a0 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00d3e4b0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d3e4c0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d3e4d0 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00d3e4e0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d3e4f0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d3e500 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ - 0x00d3e510 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d3e520 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d3e530 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00d3e540 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d3e550 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d3e560 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d3e570 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d3e580 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00d3e590 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d3e5a0 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00d3e5b0 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00d3e5c0 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00d3e5d0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d3e5e0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00d3e5f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d3e600 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d3e610 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d3e620 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00d3e630 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d3e640 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00d3e650 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00d3e660 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d3e670 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00d3e680 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00d3e690 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00d3e6a0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d3e6b0 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00d3e6c0 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00d3e6d0 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00d3e6e0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00d3e6f0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d3e700 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00d3e710 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00d3e720 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00d3e730 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d3e740 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d3e750 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d3e760 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d3e770 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00d3e780 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00d3e790 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00d3e7a0 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00d3e7b0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d3e7c0 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00d3e7d0 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00d3e7e0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d3e7f0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00d3e800 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00d3e810 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d3e820 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00d3e830 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00d3e840 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d3e850 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d3e860 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00d3e870 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00d3e880 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00d3e890 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00d3e8a0 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00d3e8b0 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00d3e8c0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d3e8d0 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00d3e8e0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d3e8f0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00d3e900 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00d3e910 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00d3e920 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d3e930 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00d3e940 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00d3e950 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00d3e960 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00d3e970 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00d3e980 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00d3e990 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00d3e9a0 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00d3e9b0 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00d3e9c0 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00d3e9d0 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00d3e9e0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d3e9f0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00d3ea00 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d3ea10 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00d3ea20 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00d3ea30 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d3ea40 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00d3ea50 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00d3ea60 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00d3ea70 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d3ea80 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d3ea90 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00d3eaa0 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ - 0x00d3eab0 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ - 0x00d3eac0 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ - 0x00d3ead0 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00d3eae0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00d3eaf0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d3eb00 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ - 0x00d3eb10 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ - 0x00d3eb20 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ - 0x00d3eb30 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ - 0x00d3eb40 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ - 0x00d3eb50 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ - 0x00d3eb60 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ - 0x00d3eb70 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d3eb80 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00d3eb90 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ - 0x00d3eba0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3ebb0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3ebc0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3ebd0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3ebe0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3ebf0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3ec00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3ec10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3ec20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3ec30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3ec40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3ec50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3ec60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3ec70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3ec80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3ec90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3eca0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3ecb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3ecc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3ecd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3ece0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3ecf0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d3ed00 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00d3ed10 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ - 0x00d3ed20 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d3ed30 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00d3ed40 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00d3ed50 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00d3ed60 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00d3ed70 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00d3ed80 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ - 0x00d3ed90 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00d3eda0 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ - 0x00d3edb0 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ - 0x00d3edc0 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ - 0x00d3edd0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d3ede0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00d3edf0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d3ee00 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d3ee10 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ - 0x00d3ee20 75743b20 0a202075 6e69666f 726d2073 ut; . uniform s │ │ │ │ - 0x00d3ee30 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ - 0x00d3ee40 5465783b 200a2020 636f6e73 7420666c Tex; . const fl │ │ │ │ - 0x00d3ee50 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00d3ee60 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00d3ee70 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d3ee80 20207b20 0a202020 20766563 34206669 { . vec4 fi │ │ │ │ - 0x00d3ee90 6e616c43 6f6c6f72 203d2074 65787475 nalColor = textu │ │ │ │ - 0x00d3eea0 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ - 0x00d3eeb0 5f636f6c 6f725465 78436f6f 72647329 _colorTexCoords) │ │ │ │ - 0x00d3eec0 3b200a20 20202066 696e616c 436f6c6f ; . finalColo │ │ │ │ - 0x00d3eed0 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ - 0x00d3eee0 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00d3eef0 6f72203d 2066696e 616c436f 6c6f723b or = finalColor; │ │ │ │ - 0x00d3ef00 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d3ef10 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d3ef20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3ef30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3ef40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3ef50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3ef60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3ef70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3ef80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3ef90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3efa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3efb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3efc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3efd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3efe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3eff0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3f000 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3f010 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3f020 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3f030 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3f040 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3f050 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3f060 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d3f070 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00d3f080 6f6c6f72 5465783b 200a2020 696e2076 olorTex; . in v │ │ │ │ - 0x00d3f090 65633320 765f7465 78436f6f 7264733b ec3 v_texCoords; │ │ │ │ - 0x00d3f0a0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d3f0b0 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ - 0x00d3f0c0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d3f0d0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d3f0e0 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ - 0x00d3f0f0 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ - 0x00d3f100 46726167 436f6c6f 72203d20 74657874 FragColor = text │ │ │ │ - 0x00d3f110 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d3f120 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ - 0x00d3f130 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d3f140 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3f150 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3f160 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3f170 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3f180 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3f190 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3f1a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3f1b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3f1c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3f1d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3f1e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3f1f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3f200 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3f210 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3f220 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3f230 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3f240 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3f250 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3f260 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3f270 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3f280 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ - 0x00d3f290 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ - 0x00d3f2a0 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ - 0x00d3f2b0 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ - 0x00d3f2c0 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ - 0x00d3f2d0 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ - 0x00d3f2e0 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ - 0x00d3f2f0 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ - 0x00d3f300 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ - 0x00d3f310 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ - 0x00d3f320 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ - 0x00d3f330 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ - 0x00d3f340 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d3f350 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00d3f360 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d3f370 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d3f380 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d3f390 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00d3f3a0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00d3f3b0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00d3f3c0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00d3f3d0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00d3f3e0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d3f3f0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d3f400 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d3f410 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00d3f420 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d3f430 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d3f440 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00d3f450 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d3f460 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00d3f470 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00d3f480 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00d3f490 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00d3f4a0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00d3f4b0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00d3f4c0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d3f4d0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00d3f4e0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00d3f4f0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00d3f500 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00d3f510 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00d3f520 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00d3f530 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00d3f540 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00d3f550 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d3f560 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00d3f570 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00d3f580 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d3f590 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00d3f5a0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00d3f5b0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00d3f5c0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00d3f5d0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d3f5e0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d3f5f0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d3f600 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00d3f610 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00d3f620 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00d3f630 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00d3f640 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d3f650 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d3f660 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d3f670 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00d3f680 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00d3f690 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00d3f6a0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00d3f6b0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00d3f6c0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00d3f6d0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d3f6e0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00d3f6f0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00d3f700 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d3f710 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00d3f720 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00d3f730 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00d3f740 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00d3f750 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d3f760 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00d3f770 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00d3f780 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00d3f790 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00d3f7a0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00d3f7b0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d3f7c0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00d3f7d0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00d3f7e0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00d3f7f0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00d3f800 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00d3f810 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00d3f820 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00d3f830 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00d3f840 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00d3f850 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00d3f860 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00d3f870 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00d3f880 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00d3f890 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00d3f8a0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00d3f8b0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00d3f8c0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d3f8d0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00d3f8e0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00d3f8f0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00d3f900 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00d3f910 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d3f920 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00d3f930 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d3f940 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ - 0x00d3f950 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ - 0x00d3f960 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ - 0x00d3f970 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ - 0x00d3f980 293b200a 2020200a 20202020 76656334 ); . . vec4 │ │ │ │ - 0x00d3f990 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ - 0x00d3f9a0 78203d20 755f7469 6c65436f 6f726473 x = u_tileCoords │ │ │ │ - 0x00d3f9b0 4d696e4d 61785b67 6c5f496e 7374616e MinMax[gl_Instan │ │ │ │ - 0x00d3f9c0 63654944 5d3b200a 20202020 76656332 ceID]; . vec2 │ │ │ │ - 0x00d3f9d0 20776f72 6c64506f 73203d20 6d697828 worldPos = mix( │ │ │ │ - 0x00d3f9e0 74696c65 436f6f72 64734d69 6e4d6178 tileCoordsMinMax │ │ │ │ - 0x00d3f9f0 2e78792c 2074696c 65436f6f 7264734d .xy, tileCoordsM │ │ │ │ - 0x00d3fa00 696e4d61 782e7a77 2c207175 61645665 inMax.zw, quadVe │ │ │ │ - 0x00d3fa10 72746578 293b200a 20202020 76656334 rtex); . vec4 │ │ │ │ - 0x00d3fa20 20706f73 203d2076 65633428 776f726c pos = vec4(worl │ │ │ │ - 0x00d3fa30 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00d3fa40 2a20755f 6d6f6465 6c566965 77202a20 * u_modelView * │ │ │ │ - 0x00d3fa50 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d3fa60 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00d3fa70 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d3fa80 666f726d 28706f73 2c20755f 7069766f form(pos, u_pivo │ │ │ │ - 0x00d3fa90 74547261 6e73666f 726d2c20 302e3029 tTransform, 0.0) │ │ │ │ - 0x00d3faa0 3b200a20 20200a20 20202076 5f746578 ; . . v_tex │ │ │ │ - 0x00d3fab0 436f6f72 6473203d 20766563 33287175 Coords = vec3(qu │ │ │ │ - 0x00d3fac0 61645665 72746578 2c20666c 6f617428 adVertex, float( │ │ │ │ - 0x00d3fad0 755f7465 78747572 65496e64 65785b67 u_textureIndex[g │ │ │ │ - 0x00d3fae0 6c5f496e 7374616e 63654944 5d29293b l_InstanceID])); │ │ │ │ - 0x00d3faf0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d3fb00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3fb10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3fb20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3fb30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3fb40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3fb50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3fb60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3fb70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3fb80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3fb90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3fba0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3fbb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3fbc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3fbd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3fbe0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3fbf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3fc00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3fc10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3fc20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3fc30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3fc40 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00d3fc50 726d204d 45444955 4d5f5020 73616d70 rm MEDIUM_P samp │ │ │ │ - 0x00d3fc60 6c657232 44417272 61792075 5f636f6c ler2DArray u_col │ │ │ │ - 0x00d3fc70 6f725465 783b200a 2020696e 20766563 orTex; . in vec │ │ │ │ - 0x00d3fc80 3320765f 74657843 6f6f7264 733b200a 3 v_texCoords; . │ │ │ │ - 0x00d3fc90 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00d3fca0 67436f6c 6f723b20 0a202063 6f6e7374 gColor; . const │ │ │ │ - 0x00d3fcb0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d3fcc0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d3fcd0 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ - 0x00d3fce0 29200a20 207b200a 20202020 765f4672 ) . { . v_Fr │ │ │ │ - 0x00d3fcf0 6167436f 6c6f7220 3d207465 78747572 agColor = textur │ │ │ │ - 0x00d3fd00 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d3fd10 74657843 6f6f7264 73293b20 0a20207d texCoords); . } │ │ │ │ - 0x00d3fd20 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d3fd30 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d3fd40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d3fd50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d3fd60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d3fd70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d3fd80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d3fd90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d3fda0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d3fdb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d3fdc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d3fdd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d3fde0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d3fdf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d3fe00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d3fe10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d3fe20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d3fe30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d3fe40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d3fe50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d3fe60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d3fe70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d3fe80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d3fe90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d3fea0 72643b20 0a202069 6e207665 63322076 rd; . in vec2 v │ │ │ │ - 0x00d3feb0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d3fec0 2020696e 20666c6f 61742076 5f68616c in float v_hal │ │ │ │ - 0x00d3fed0 664c656e 6774683b 200a2020 6f757420 fLength; . out │ │ │ │ - 0x00d3fee0 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ - 0x00d3fef0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d3ff00 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00d3ff10 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d3ff20 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d3ff30 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d3ff40 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00d3ff50 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d3ff60 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ - 0x00d3ff70 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d3ff80 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00d3ff90 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d3ffa0 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ - 0x00d3ffb0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d3ffc0 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ - 0x00d3ffd0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d3ffe0 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ - 0x00d3fff0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d40000 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00d40010 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d40020 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d40030 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00d40040 32442075 5f6d6173 6b546578 3b200a20 2D u_maskTex; . │ │ │ │ - 0x00d40050 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ - 0x00d40060 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ - 0x00d40070 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ - 0x00d40080 6f6e7374 20666c6f 6174206b 4f75746c onst float kOutl │ │ │ │ - 0x00d40090 696e6554 68726573 686f6c64 31203d20 ineThreshold1 = │ │ │ │ - 0x00d400a0 302e383b 200a2020 636f6e73 7420666c 0.8; . const fl │ │ │ │ - 0x00d400b0 6f617420 6b4f7574 6c696e65 54687265 oat kOutlineThre │ │ │ │ - 0x00d400c0 73686f6c 6432203d 20302e35 3b200a20 shold2 = 0.5; . │ │ │ │ - 0x00d400d0 20636f6e 73742066 6c6f6174 206b4d61 const float kMa │ │ │ │ - 0x00d400e0 736b4f70 61636974 79203d20 302e373b skOpacity = 0.7; │ │ │ │ - 0x00d400f0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d40100 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d40110 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d40120 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d40130 0a202020 20766563 3420636f 6c6f7220 . vec4 color │ │ │ │ - 0x00d40140 3d207465 78747572 6528755f 636f6c6f = texture(u_colo │ │ │ │ - 0x00d40150 72546578 2c20765f 636f6c6f 72546578 rTex, v_colorTex │ │ │ │ - 0x00d40160 436f6f72 64293b20 0a202020 20666c6f Coord); . flo │ │ │ │ - 0x00d40170 61742061 6c706861 436f6465 203d2063 at alphaCode = c │ │ │ │ - 0x00d40180 6f6c6f72 2e613b20 0a202020 20766563 olor.a; . vec │ │ │ │ - 0x00d40190 34206d61 736b203d 20746578 74757265 4 mask = texture │ │ │ │ - 0x00d401a0 28755f6d 61736b54 65782c20 765f6d61 (u_maskTex, v_ma │ │ │ │ - 0x00d401b0 736b5465 78436f6f 7264293b 200a2020 skTexCoord); . │ │ │ │ - 0x00d401c0 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ - 0x00d401d0 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ - 0x00d401e0 6d6f6f74 68737465 70286b41 6e746961 moothstep(kAntia │ │ │ │ - 0x00d401f0 6c696173 696e6754 68726573 686f6c64 liasingThreshold │ │ │ │ - 0x00d40200 2c20312e 302c2061 62732876 5f68616c , 1.0, abs(v_hal │ │ │ │ - 0x00d40210 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ - 0x00d40220 20636f6c 6f722e72 6762203d 206d6978 color.rgb = mix │ │ │ │ - 0x00d40230 28636f6c 6f722e72 67622c20 6d61736b (color.rgb, mask │ │ │ │ - 0x00d40240 2e726762 202a206d 69782875 5f6c6967 .rgb * mix(u_lig │ │ │ │ - 0x00d40250 68744172 726f7743 6f6c6f72 2e726762 htArrowColor.rgb │ │ │ │ - 0x00d40260 2c20755f 6461726b 4172726f 77436f6c , u_darkArrowCol │ │ │ │ - 0x00d40270 6f722e72 67622c20 73746570 28616c70 or.rgb, step(alp │ │ │ │ - 0x00d40280 6861436f 64652c20 302e3629 292c206d haCode, 0.6)), m │ │ │ │ - 0x00d40290 61736b2e 61202a20 6b4d6173 6b4f7061 ask.a * kMaskOpa │ │ │ │ - 0x00d402a0 63697479 293b200a 20202020 69662028 city); . if ( │ │ │ │ - 0x00d402b0 755f6f75 746c696e 65203e20 302e3029 u_outline > 0.0) │ │ │ │ - 0x00d402c0 200a2020 20207b20 0a202020 20202063 . { . c │ │ │ │ - 0x00d402d0 6f6c6f72 2e726762 203d206d 69782863 olor.rgb = mix(c │ │ │ │ - 0x00d402e0 6f6c6f72 2e726762 2c20755f 6f75746c olor.rgb, u_outl │ │ │ │ - 0x00d402f0 696e6543 6f6c6f72 2e726762 2c207374 ineColor.rgb, st │ │ │ │ - 0x00d40300 6570286b 4f75746c 696e6554 68726573 ep(kOutlineThres │ │ │ │ - 0x00d40310 686f6c64 312c2061 62732876 5f68616c hold1, abs(v_hal │ │ │ │ - 0x00d40320 664c656e 67746829 29293b20 0a202020 fLength))); . │ │ │ │ - 0x00d40330 20202063 6f6c6f72 2e726762 203d206d color.rgb = m │ │ │ │ - 0x00d40340 69782863 6f6c6f72 2e726762 2c20755f ix(color.rgb, u_ │ │ │ │ - 0x00d40350 6f75746c 696e6543 6f6c6f72 2e726762 outlineColor.rgb │ │ │ │ - 0x00d40360 2c20736d 6f6f7468 73746570 286b4f75 , smoothstep(kOu │ │ │ │ - 0x00d40370 746c696e 65546872 6573686f 6c64322c tlineThreshold2, │ │ │ │ - 0x00d40380 206b4f75 746c696e 65546872 6573686f kOutlineThresho │ │ │ │ - 0x00d40390 6c64312c 20616273 28765f68 616c664c ld1, abs(v_halfL │ │ │ │ - 0x00d403a0 656e6774 68292929 3b200a20 2020207d ength))); . } │ │ │ │ - 0x00d403b0 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ - 0x00d403c0 72203d20 636f6c6f 723b200a 20207d20 r = color; . } │ │ │ │ - 0x00d403d0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d403e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d403f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d40400 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d40410 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d40420 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d40430 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d40440 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d40450 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d40460 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d40470 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d40480 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d40490 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d404a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d404b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d404c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d404d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d404e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d404f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d40500 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d40510 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d40520 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d40530 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d40540 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d40550 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d40560 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d40570 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d40580 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00d40590 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ - 0x00d405a0 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ - 0x00d405b0 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ - 0x00d405c0 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ - 0x00d405d0 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d405e0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d405f0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d40600 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d40610 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d40620 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d40630 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ - 0x00d40640 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d40650 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ - 0x00d40660 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d40670 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ - 0x00d40680 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d40690 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ - 0x00d406a0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d406b0 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ - 0x00d406c0 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ - 0x00d406d0 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ - 0x00d406e0 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ - 0x00d406f0 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ - 0x00d40700 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d40710 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d40720 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d40730 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00d40740 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00d40750 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00d40760 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00d40770 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00d40780 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d40790 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d407a0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00d407b0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00d407c0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00d407d0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d407e0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00d407f0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00d40800 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00d40810 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00d40820 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00d40830 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00d40840 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d40850 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00d40860 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00d40870 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d40880 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00d40890 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00d408a0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d408b0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00d408c0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00d408d0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00d408e0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d408f0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00d40900 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00d40910 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00d40920 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d40930 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d40940 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d40950 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d40960 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00d40970 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00d40980 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00d40990 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00d409a0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00d409b0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d409c0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d409d0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00d409e0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00d409f0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00d40a00 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00d40a10 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00d40a20 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00d40a30 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d40a40 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00d40a50 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d40a60 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00d40a70 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00d40a80 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00d40a90 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00d40aa0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00d40ab0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d40ac0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00d40ad0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00d40ae0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00d40af0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00d40b00 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00d40b10 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d40b20 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00d40b30 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00d40b40 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00d40b50 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00d40b60 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00d40b70 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00d40b80 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00d40b90 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00d40ba0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00d40bb0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00d40bc0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00d40bd0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00d40be0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00d40bf0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00d40c00 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00d40c10 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00d40c20 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00d40c30 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d40c40 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00d40c50 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00d40c60 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00d40c70 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d40c80 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00d40c90 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d40ca0 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ - 0x00d40cb0 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ - 0x00d40cc0 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00d40cd0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00d40ce0 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00d40cf0 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00d40d00 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00d40d10 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d40d20 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00d40d30 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00d40d40 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00d40d50 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ - 0x00d40d60 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ - 0x00d40d70 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ - 0x00d40d80 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ - 0x00d40d90 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ - 0x00d40da0 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00d40db0 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ - 0x00d40dc0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d40dd0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d40de0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00d40df0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d40e00 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00d40e10 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ - 0x00d40e20 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d40e30 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d40e40 20202020 20202020 20202020 20755f6d u_m │ │ │ │ - 0x00d40e50 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ - 0x00d40e60 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ - 0x00d40e70 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ - 0x00d40e80 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ - 0x00d40e90 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ - 0x00d40ea0 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ - 0x00d40eb0 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ - 0x00d40ec0 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ - 0x00d40ed0 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ - 0x00d40ee0 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00d40ef0 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ - 0x00d40f00 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ - 0x00d40f10 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ - 0x00d40f20 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ - 0x00d40f30 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ - 0x00d40f40 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ - 0x00d40f50 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ - 0x00d40f60 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ - 0x00d40f70 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ - 0x00d40f80 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ - 0x00d40f90 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00d40fa0 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ - 0x00d40fb0 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ - 0x00d40fc0 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ - 0x00d40fd0 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ - 0x00d40fe0 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ - 0x00d40ff0 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ - 0x00d41000 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00d41010 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ - 0x00d41020 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d41030 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ - 0x00d41040 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ - 0x00d41050 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ - 0x00d41060 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ - 0x00d41070 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ - 0x00d41080 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d41090 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ - 0x00d410a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d410b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d410c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d410d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d410e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d410f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d41100 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d41110 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d41120 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d41130 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d41140 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d41150 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d41160 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d41170 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d41180 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d41190 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d411a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d411b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d411c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d411d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d411e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d411f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d41200 72643b20 0a202069 6e207665 63332076 rd; . in vec3 v │ │ │ │ - 0x00d41210 5f726164 6975733b 200a2020 6f757420 _radius; . out │ │ │ │ - 0x00d41220 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ - 0x00d41230 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d41240 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00d41250 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d41260 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d41270 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d41280 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00d41290 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00d412a0 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ - 0x00d412b0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d412c0 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ - 0x00d412d0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d412e0 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ - 0x00d412f0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ - 0x00d41300 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ - 0x00d41310 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d41320 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ - 0x00d41330 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d41340 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00d41350 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00d41360 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00d41370 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ - 0x00d41380 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ - 0x00d41390 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ - 0x00d413a0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d413b0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d413c0 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ - 0x00d413d0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00d413e0 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ - 0x00d413f0 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ - 0x00d41400 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00d41410 293b200a 20202020 666c6f61 7420736d ); . float sm │ │ │ │ - 0x00d41420 616c6c52 61646975 73203d20 765f7261 allRadius = v_ra │ │ │ │ - 0x00d41430 64697573 2e7a202a 206b416e 7469616c dius.z * kAntial │ │ │ │ - 0x00d41440 69617369 6e675468 72657368 6f6c643b iasingThreshold; │ │ │ │ - 0x00d41450 200a2020 2020666c 6f617420 73746570 . float step │ │ │ │ - 0x00d41460 56616c75 65203d20 736d6f6f 74687374 Value = smoothst │ │ │ │ - 0x00d41470 65702873 6d616c6c 52616469 7573202a ep(smallRadius * │ │ │ │ - 0x00d41480 20736d61 6c6c5261 64697573 2c20765f smallRadius, v_ │ │ │ │ - 0x00d41490 72616469 75732e7a 202a2076 5f726164 radius.z * v_rad │ │ │ │ - 0x00d414a0 6975732e 7a2c200a 20202020 20202020 ius.z, . │ │ │ │ - 0x00d414b0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d414c0 20202020 20202020 20765f72 61646975 v_radiu │ │ │ │ - 0x00d414d0 732e7820 2a20765f 72616469 75732e78 s.x * v_radius.x │ │ │ │ - 0x00d414e0 202b2076 5f726164 6975732e 79202a20 + v_radius.y * │ │ │ │ - 0x00d414f0 765f7261 64697573 2e79293b 200a2020 v_radius.y); . │ │ │ │ - 0x00d41500 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ - 0x00d41510 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ - 0x00d41520 74657056 616c7565 293b200a 20202020 tepValue); . │ │ │ │ - 0x00d41530 69662028 636f6c6f 722e6120 3c20302e if (color.a < 0. │ │ │ │ - 0x00d41540 30312920 0a202020 20202064 69736361 01) . disca │ │ │ │ - 0x00d41550 72643b20 0a202020 20765f46 72616743 rd; . v_FragC │ │ │ │ - 0x00d41560 6f6c6f72 203d2063 6f6c6f72 3b200a20 olor = color; . │ │ │ │ - 0x00d41570 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d41580 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d41590 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d415a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d415b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d415c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d415d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d415e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d415f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d41600 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d41610 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d41620 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d41630 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d41640 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d41650 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d41660 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d41670 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d41680 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d41690 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d416a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d416b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d416c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d416d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d416e0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d416f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d41700 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d41710 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d41720 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00d41730 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ - 0x00d41740 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ - 0x00d41750 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d41760 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d41770 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d41780 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d41790 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d417a0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d417b0 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ - 0x00d417c0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d417d0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00d417e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d417f0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ - 0x00d41800 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00d41810 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ - 0x00d41820 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d41830 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ - 0x00d41840 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d41850 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00d41860 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d41870 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d41880 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d41890 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d418a0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d418b0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d418c0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d418d0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d418e0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d418f0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d41900 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d41910 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d41920 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d41930 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d41940 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d41950 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d41960 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d41970 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d41980 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d41990 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d419a0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d419b0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d419c0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d419d0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d419e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d419f0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d41a00 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d41a10 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d41a20 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d41a30 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d41a40 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d41a50 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d41a60 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d41a70 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d41a80 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d41a90 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d41aa0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d41ab0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d41ac0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d41ad0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d41ae0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d41af0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d41b00 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d41b10 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d41b20 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d41b30 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d41b40 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d41b50 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d41b60 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d41b70 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d41b80 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d41b90 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d41ba0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d41bb0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d41bc0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d41bd0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d41be0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d41bf0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d41c00 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d41c10 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d41c20 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d41c30 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d41c40 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d41c50 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d41c60 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d41c70 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d41c80 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d41c90 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d41ca0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d41cb0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d41cc0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d41cd0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d41ce0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d41cf0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d41d00 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d41d10 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d41d20 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d41d30 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d41d40 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d41d50 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d41d60 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d41d70 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d41d80 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d41d90 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d41da0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d41db0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d41dc0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d41dd0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d41de0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d41df0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d41e00 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ - 0x00d41e10 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ - 0x00d41e20 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ - 0x00d41e30 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ - 0x00d41e40 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ - 0x00d41e50 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ - 0x00d41e60 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d41e70 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ - 0x00d41e80 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ - 0x00d41e90 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ - 0x00d41ea0 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ - 0x00d41eb0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00d41ec0 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ - 0x00d41ed0 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ - 0x00d41ee0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00d41ef0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d41f00 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00d41f10 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00d41f20 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00d41f30 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ - 0x00d41f40 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ - 0x00d41f50 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ - 0x00d41f60 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d41f70 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ - 0x00d41f80 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ - 0x00d41f90 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d41fa0 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ - 0x00d41fb0 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ - 0x00d41fc0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d41fd0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d41fe0 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00d41ff0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ - 0x00d42000 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ - 0x00d42010 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ - 0x00d42020 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ - 0x00d42030 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ - 0x00d42040 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ - 0x00d42050 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ - 0x00d42060 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ - 0x00d42070 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d42080 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ - 0x00d42090 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ - 0x00d420a0 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ - 0x00d420b0 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ - 0x00d420c0 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ - 0x00d420d0 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ - 0x00d420e0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00d420f0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d42100 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d42110 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d42120 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d42130 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d42140 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d42150 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d42160 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d42170 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d42180 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d42190 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d421a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d421b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d421c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d421d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d421e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d421f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d42200 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d42210 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d42220 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d42230 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d42240 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d42250 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d42260 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d42270 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d42280 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d42290 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d422a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d422b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d422c0 72643b20 0a20206f 75742076 65633420 rd; . out vec4 │ │ │ │ - 0x00d422d0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00d422e0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d422f0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d42300 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d42310 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d42320 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d42330 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d42340 666f726d 20766563 3420755f 74726166 form vec4 u_traf │ │ │ │ - 0x00d42350 66696350 6172616d 733b200a 2020756e ficParams; . un │ │ │ │ - 0x00d42360 69666f72 6d207665 63342075 5f6f7574 iform vec4 u_out │ │ │ │ - 0x00d42370 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ - 0x00d42380 69666f72 6d207665 63342075 5f6c6967 iform vec4 u_lig │ │ │ │ - 0x00d42390 68744172 726f7743 6f6c6f72 3b200a20 htArrowColor; . │ │ │ │ - 0x00d423a0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00d423b0 6461726b 4172726f 77436f6c 6f723b20 darkArrowColor; │ │ │ │ - 0x00d423c0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d423d0 20755f6f 75746c69 6e653b20 0a202075 u_outline; . u │ │ │ │ - 0x00d423e0 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ - 0x00d423f0 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ - 0x00d42400 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00d42410 6f6c6f72 5465783b 200a2020 636f6e73 olorTex; . cons │ │ │ │ - 0x00d42420 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00d42430 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00d42440 2e303b20 0a202076 6f696420 6d61696e .0; . void main │ │ │ │ - 0x00d42450 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00d42460 3420636f 6c6f7220 3d207465 78747572 4 color = textur │ │ │ │ - 0x00d42470 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ - 0x00d42480 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ - 0x00d42490 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ - 0x00d424a0 203d2076 65633428 636f6c6f 722e7267 = vec4(color.rg │ │ │ │ - 0x00d424b0 622c2075 5f6f7061 63697479 293b200a b, u_opacity); . │ │ │ │ - 0x00d424c0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00d424d0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d34020 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00d34030 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ + 0x00d34040 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ + 0x00d34050 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ + 0x00d34060 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ + 0x00d34070 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ + 0x00d34080 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ + 0x00d34090 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ + 0x00d340a0 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ + 0x00d340b0 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ + 0x00d340c0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00d340d0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00d340e0 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ + 0x00d340f0 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ + 0x00d34100 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ + 0x00d34110 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ + 0x00d34120 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ + 0x00d34130 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ + 0x00d34140 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d34150 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d34160 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d34170 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d34180 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d34190 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d341a0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d341b0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d341c0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d341d0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d341e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d341f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d34200 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d34210 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d34220 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d34230 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d34240 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d34250 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d34260 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d34270 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d34280 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d34290 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d342a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d342b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d342c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d342d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d342e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d342f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d34300 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d34310 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d34320 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d34330 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d34340 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d34350 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ + 0x00d34360 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ + 0x00d34370 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ + 0x00d34380 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d34390 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d343a0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d343b0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d343c0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d343d0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d343e0 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d343f0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d34400 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d34410 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d34420 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d34430 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d34440 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ + 0x00d34450 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d34460 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d34470 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00d34480 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d34490 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d344a0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d344b0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d344c0 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00d344d0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d344e0 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00d344f0 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00d34500 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00d34510 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d34520 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00d34530 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d34540 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d34550 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d34560 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00d34570 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d34580 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00d34590 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00d345a0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d345b0 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00d345c0 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00d345d0 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00d345e0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d345f0 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00d34600 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00d34610 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00d34620 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00d34630 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d34640 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00d34650 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00d34660 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00d34670 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d34680 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d34690 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d346a0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d346b0 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00d346c0 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00d346d0 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00d346e0 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00d346f0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d34700 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00d34710 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00d34720 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d34730 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00d34740 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00d34750 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d34760 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00d34770 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00d34780 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d34790 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d347a0 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00d347b0 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00d347c0 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00d347d0 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00d347e0 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00d347f0 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00d34800 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d34810 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00d34820 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d34830 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00d34840 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00d34850 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00d34860 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d34870 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00d34880 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00d34890 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00d348a0 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00d348b0 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00d348c0 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00d348d0 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00d348e0 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00d348f0 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00d34900 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00d34910 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00d34920 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d34930 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00d34940 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d34950 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00d34960 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00d34970 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d34980 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00d34990 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00d349a0 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00d349b0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d349c0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d349d0 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00d349e0 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ + 0x00d349f0 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ + 0x00d34a00 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ + 0x00d34a10 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00d34a20 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00d34a30 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d34a40 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ + 0x00d34a50 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ + 0x00d34a60 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ + 0x00d34a70 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ + 0x00d34a80 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ + 0x00d34a90 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ + 0x00d34aa0 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ + 0x00d34ab0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d34ac0 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00d34ad0 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ + 0x00d34ae0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d34af0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d34b00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d34b10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d34b20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d34b30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d34b40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d34b50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d34b60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d34b70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d34b80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d34b90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d34ba0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d34bb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d34bc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d34bd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d34be0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d34bf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d34c00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d34c10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d34c20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d34c30 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d34c40 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d34c50 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d34c60 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d34c70 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d34c80 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d34c90 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d34ca0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d34cb0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d34cc0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d34cd0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d34ce0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d34cf0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d34d00 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d34d10 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d34d20 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d34d30 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d34d40 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d34d50 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d34d60 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d34d70 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d34d80 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d34d90 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d34da0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d34db0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d34dc0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d34dd0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d34de0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d34df0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d34e00 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d34e10 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d34e20 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00d34e30 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00d34e40 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d34e50 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ + 0x00d34e60 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ + 0x00d34e70 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d34e80 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d34e90 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d34ea0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d34eb0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d34ec0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d34ed0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d34ee0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d34ef0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d34f00 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d34f10 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d34f20 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d34f30 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d34f40 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d34f50 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d34f60 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d34f70 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d34f80 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00d34f90 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d34fa0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d34fb0 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d34fc0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d34fd0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d34fe0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d34ff0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d35000 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d35010 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d35020 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d35030 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d35040 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d35050 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d35060 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d35070 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d35080 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d35090 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d350a0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d350b0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d350c0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d350d0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d350e0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d350f0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d35100 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d35110 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d35120 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d35130 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d35140 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d35150 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d35160 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d35170 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d35180 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d35190 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d351a0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d351b0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d351c0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d351d0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d351e0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d351f0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d35200 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d35210 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d35220 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d35230 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d35240 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d35250 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d35260 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d35270 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d35280 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d35290 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d352a0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d352b0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d352c0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d352d0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d352e0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d352f0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d35300 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d35310 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d35320 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d35330 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d35340 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d35350 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d35360 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d35370 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d35380 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00d35390 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d353a0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d353b0 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d353c0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d353d0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d353e0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d353f0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d35400 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ + 0x00d35410 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ + 0x00d35420 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ + 0x00d35430 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ + 0x00d35440 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ + 0x00d35450 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ + 0x00d35460 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ + 0x00d35470 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ + 0x00d35480 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ + 0x00d35490 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ + 0x00d354a0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d354b0 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ + 0x00d354c0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00d354d0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00d354e0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00d354f0 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00d35500 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d35510 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d35520 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d35530 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00d35540 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00d35550 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d35560 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00d35570 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d35580 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d35590 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00d355a0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00d355b0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00d355c0 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ + 0x00d355d0 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ + 0x00d355e0 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ + 0x00d355f0 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ + 0x00d35600 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ + 0x00d35610 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00d35620 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ + 0x00d35630 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d35640 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ + 0x00d35650 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00d35660 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d35670 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ + 0x00d35680 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d35690 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ + 0x00d356a0 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ + 0x00d356b0 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ + 0x00d356c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d356d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d356e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d356f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d35700 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d35710 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d35720 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d35730 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d35740 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d35750 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d35760 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d35770 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d35780 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d35790 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d357a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d357b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d357c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d357d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d357e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d357f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d35800 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d35810 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d35820 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d35830 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ + 0x00d35840 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ + 0x00d35850 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ + 0x00d35860 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d35870 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ + 0x00d35880 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d35890 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ + 0x00d358a0 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d358b0 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ + 0x00d358c0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d358d0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d358e0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d358f0 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d35900 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d35910 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d35920 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d35930 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d35940 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d35950 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d35960 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d35970 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d35980 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d35990 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d359a0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d359b0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d359c0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d359d0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d359e0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d359f0 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d35a00 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d35a10 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d35a20 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d35a30 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d35a40 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d35a50 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d35a60 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d35a70 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d35a80 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d35a90 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d35aa0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d35ab0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d35ac0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d35ad0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d35ae0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d35af0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d35b00 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d35b10 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d35b20 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d35b30 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d35b40 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d35b50 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d35b60 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d35b70 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d35b80 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d35b90 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d35ba0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d35bb0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d35bc0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d35bd0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d35be0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d35bf0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d35c00 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d35c10 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d35c20 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d35c30 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d35c40 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d35c50 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d35c60 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d35c70 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d35c80 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d35c90 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d35ca0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d35cb0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d35cc0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d35cd0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d35ce0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d35cf0 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d35d00 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d35d10 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d35d20 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d35d30 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d35d40 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d35d50 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d35d60 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d35d70 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d35d80 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d35d90 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d35da0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d35db0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d35dc0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d35dd0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d35de0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d35df0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d35e00 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d35e10 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d35e20 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d35e30 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d35e40 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d35e50 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d35e60 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d35e70 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ + 0x00d35e80 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ + 0x00d35e90 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ + 0x00d35ea0 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ + 0x00d35eb0 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ + 0x00d35ec0 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ + 0x00d35ed0 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ + 0x00d35ee0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d35ef0 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ + 0x00d35f00 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d35f10 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ + 0x00d35f20 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ + 0x00d35f30 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ + 0x00d35f40 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ + 0x00d35f50 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ + 0x00d35f60 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00d35f70 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00d35f80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d35f90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d35fa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d35fb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d35fc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d35fd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d35fe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d35ff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d36000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d36010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d36020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d36030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d36040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d36050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d36060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d36070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d36080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d36090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d360a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d360b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d360c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d360d0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d360e0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d360f0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00d36100 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00d36110 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00d36120 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00d36130 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d36140 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00d36150 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00d36160 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00d36170 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00d36180 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00d36190 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00d361a0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00d361b0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d361c0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d361d0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d361e0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d361f0 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d36200 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d36210 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d36220 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d36230 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d36240 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d36250 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d36260 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d36270 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d36280 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d36290 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d362a0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d362b0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d362c0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d362d0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d362e0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d362f0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d36300 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d36310 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d36320 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d36330 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d36340 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d36350 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d36360 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d36370 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d36380 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d36390 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d363a0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d363b0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d363c0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d363d0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d363e0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d363f0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d36400 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d36410 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d36420 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d36430 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d36440 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d36450 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d36460 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d36470 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d36480 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d36490 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d364a0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d364b0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d364c0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d364d0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d364e0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d364f0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d36500 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d36510 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d36520 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d36530 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d36540 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d36550 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d36560 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d36570 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d36580 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d36590 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d365a0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d365b0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d365c0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d365d0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d365e0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d365f0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d36600 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d36610 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d36620 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d36630 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d36640 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d36650 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d36660 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d36670 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d36680 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d36690 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d366a0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d366b0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d366c0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d366d0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d366e0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d366f0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d36700 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d36710 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d36720 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d36730 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d36740 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d36750 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d36760 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d36770 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d36780 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d36790 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d367a0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d367b0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d367c0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d367d0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d367e0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d367f0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d36800 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d36810 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d36820 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d36830 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d36840 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d36850 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d36860 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d36870 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d36880 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d36890 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d368a0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d368b0 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00d368c0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d368d0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d368e0 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00d368f0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d36900 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00d36910 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d36920 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00d36930 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d36940 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d36950 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00d36960 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00d36970 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00d36980 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00d36990 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00d369a0 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00d369b0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00d369c0 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ + 0x00d369d0 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ + 0x00d369e0 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ + 0x00d369f0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d36a00 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00d36a10 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00d36a20 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d36a30 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d36a40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d36a50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d36a60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d36a70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d36a80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d36a90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d36aa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d36ab0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d36ac0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d36ad0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d36ae0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d36af0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d36b00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d36b10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d36b20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d36b30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d36b40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d36b50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d36b60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d36b70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d36b80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d36b90 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d36ba0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d36bb0 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d36bc0 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d36bd0 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d36be0 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d36bf0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d36c00 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d36c10 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d36c20 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d36c30 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d36c40 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d36c50 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d36c60 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d36c70 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d36c80 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d36c90 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d36ca0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d36cb0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d36cc0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d36cd0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d36ce0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d36cf0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d36d00 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d36d10 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d36d20 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d36d30 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d36d40 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d36d50 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d36d60 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d36d70 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d36d80 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ + 0x00d36d90 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ + 0x00d36da0 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d36db0 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ + 0x00d36dc0 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ + 0x00d36dd0 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ + 0x00d36de0 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ + 0x00d36df0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d36e00 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d36e10 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d36e20 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d36e30 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d36e40 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d36e50 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d36e60 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d36e70 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d36e80 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d36e90 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d36ea0 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d36eb0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d36ec0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d36ed0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d36ee0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d36ef0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d36f00 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d36f10 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d36f20 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d36f30 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d36f40 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d36f50 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d36f60 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d36f70 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d36f80 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d36f90 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d36fa0 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d36fb0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d36fc0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d36fd0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d36fe0 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d36ff0 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d37000 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d37010 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d37020 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d37030 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d37040 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d37050 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d37060 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d37070 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d37080 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d37090 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d370a0 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d370b0 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d370c0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d370d0 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d370e0 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d370f0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d37100 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d37110 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d37120 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d37130 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d37140 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d37150 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d37160 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d37170 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d37180 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d37190 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d371a0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d371b0 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d371c0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d371d0 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d371e0 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d371f0 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d37200 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d37210 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d37220 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d37230 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d37240 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d37250 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d37260 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d37270 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d37280 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d37290 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d372a0 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d372b0 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d372c0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d372d0 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d372e0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d372f0 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d37300 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d37310 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d37320 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d37330 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d37340 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d37350 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d37360 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d37370 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d37380 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ + 0x00d37390 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ + 0x00d373a0 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ + 0x00d373b0 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ + 0x00d373c0 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ + 0x00d373d0 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ + 0x00d373e0 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ + 0x00d373f0 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ + 0x00d37400 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ + 0x00d37410 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ + 0x00d37420 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ + 0x00d37430 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ + 0x00d37440 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ + 0x00d37450 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ + 0x00d37460 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ + 0x00d37470 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ + 0x00d37480 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ + 0x00d37490 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ + 0x00d374a0 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ + 0x00d374b0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d374c0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d374d0 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ + 0x00d374e0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d374f0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d37500 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ + 0x00d37510 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ + 0x00d37520 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ + 0x00d37530 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ + 0x00d37540 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ + 0x00d37550 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ + 0x00d37560 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d37570 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ + 0x00d37580 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d37590 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ + 0x00d375a0 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ + 0x00d375b0 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ + 0x00d375c0 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ + 0x00d375d0 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ + 0x00d375e0 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ + 0x00d375f0 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ + 0x00d37600 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ + 0x00d37610 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d37620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d37630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d37640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d37650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d37660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d37670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d37680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d37690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d376a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d376b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d376c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d376d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d376e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d376f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d37700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d37710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d37720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d37730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d37740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d37750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d37760 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d37770 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d37780 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d37790 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d377a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d377b0 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d377c0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d377d0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d377e0 23656e64 6966200a 2020696e 20666c6f #endif . in flo │ │ │ │ + 0x00d377f0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00d37800 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00d37810 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d37820 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d37830 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d37840 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d37850 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d37860 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d37870 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d37880 65633420 755f706f 73697469 6f6e3b20 ec4 u_position; │ │ │ │ + 0x00d37890 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d378a0 755f6c69 6e655061 72616d73 3b200a20 u_lineParams; . │ │ │ │ + 0x00d378b0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d378c0 5f616363 75726163 793b200a 2020756e _accuracy; . un │ │ │ │ + 0x00d378d0 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ + 0x00d378e0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ + 0x00d378f0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d37900 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d37910 61742075 5f617a69 6d75743b 200a2020 at u_azimut; . │ │ │ │ + 0x00d37920 636f6e73 7420666c 6f617420 6b416e74 const float kAnt │ │ │ │ + 0x00d37930 69616c69 6173696e 67546872 6573686f ialiasingThresho │ │ │ │ + 0x00d37940 6c64203d 20302e39 323b200a 2020636f ld = 0.92; . co │ │ │ │ + 0x00d37950 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d37960 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d37970 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d37980 696e2829 200a2020 7b200a20 20236966 in() . { . #if │ │ │ │ + 0x00d37990 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00d379a0 20202020 4c4f575f 50207665 63342063 LOW_P vec4 c │ │ │ │ + 0x00d379b0 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ + 0x00d379c0 0a202023 656c7365 200a2020 20204c4f . #else . LO │ │ │ │ + 0x00d379d0 575f5020 76656334 20636f6c 6f72203d W_P vec4 color = │ │ │ │ + 0x00d379e0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d379f0 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00d37a00 6f6f7264 293b200a 20202365 6e646966 oord); . #endif │ │ │ │ + 0x00d37a10 200a2020 2020636f 6c6f722e 61202a3d . color.a *= │ │ │ │ + 0x00d37a20 20755f6f 70616369 74793b20 0a202020 u_opacity; . │ │ │ │ + 0x00d37a30 20636f6c 6f722e61 202a3d20 28312e30 color.a *= (1.0 │ │ │ │ + 0x00d37a40 202d2073 6d6f6f74 68737465 70286b41 - smoothstep(kA │ │ │ │ + 0x00d37a50 6e746961 6c696173 696e6754 68726573 ntialiasingThres │ │ │ │ + 0x00d37a60 686f6c64 2c20312e 302c2061 62732876 hold, 1.0, abs(v │ │ │ │ + 0x00d37a70 5f6c656e 67746859 2929293b 200a2020 _lengthY))); . │ │ │ │ + 0x00d37a80 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d37a90 636f6c6f 723b200a 20207d20 0a000000 color; . } .... │ │ │ │ + 0x00d37aa0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d37ab0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d37ac0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d37ad0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d37ae0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d37af0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d37b00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d37b10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d37b20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d37b30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d37b40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d37b50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d37b60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d37b70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d37b80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d37b90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d37ba0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d37bb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d37bc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d37bd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d37be0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d37bf0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d37c00 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d37c10 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d37c20 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d37c30 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d37c40 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d37c50 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d37c60 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d37c70 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d37c80 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d37c90 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d37ca0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d37cb0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d37cc0 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ + 0x00d37cd0 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ + 0x00d37ce0 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ + 0x00d37cf0 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ + 0x00d37d00 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ + 0x00d37d10 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d37d20 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d37d30 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d37d40 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d37d50 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d37d60 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d37d70 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d37d80 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d37d90 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d37da0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d37db0 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d37dc0 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d37dd0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d37de0 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d37df0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d37e00 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d37e10 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d37e20 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d37e30 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d37e40 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d37e50 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d37e60 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d37e70 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d37e80 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d37e90 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d37ea0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d37eb0 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d37ec0 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d37ed0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d37ee0 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d37ef0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d37f00 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d37f10 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d37f20 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d37f30 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d37f40 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d37f50 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d37f60 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d37f70 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d37f80 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d37f90 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d37fa0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d37fb0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d37fc0 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d37fd0 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d37fe0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d37ff0 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d38000 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d38010 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d38020 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d38030 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d38040 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d38050 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d38060 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d38070 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d38080 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d38090 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d380a0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d380b0 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d380c0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d380d0 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d380e0 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d380f0 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d38100 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d38110 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d38120 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d38130 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d38140 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d38150 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d38160 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d38170 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d38180 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d38190 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d381a0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d381b0 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d381c0 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d381d0 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d381e0 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d381f0 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d38200 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d38210 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d38220 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d38230 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d38240 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d38250 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d38260 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d38270 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d38280 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d38290 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d382a0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d382b0 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ + 0x00d382c0 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ + 0x00d382d0 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d382e0 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d382f0 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d38300 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d38310 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d38320 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ + 0x00d38330 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ + 0x00d38340 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00d38350 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ + 0x00d38360 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ + 0x00d38370 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ + 0x00d38380 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ + 0x00d38390 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d383a0 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ + 0x00d383b0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00d383c0 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ + 0x00d383d0 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ + 0x00d383e0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d383f0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d38400 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ + 0x00d38410 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ + 0x00d38420 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ + 0x00d38430 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ + 0x00d38440 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ + 0x00d38450 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ + 0x00d38460 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ + 0x00d38470 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ + 0x00d38480 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d38490 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ + 0x00d384a0 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ + 0x00d384b0 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ + 0x00d384c0 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d384d0 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ + 0x00d384e0 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00d384f0 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00d38500 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d38510 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ + 0x00d38520 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ + 0x00d38530 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ + 0x00d38540 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ + 0x00d38550 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d38560 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d38570 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d38580 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d38590 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d385a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d385b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d385c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d385d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d385e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d385f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d38600 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d38610 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d38620 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d38630 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d38640 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d38650 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d38660 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d38670 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d38680 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d38690 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d386a0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d386b0 726d204d 45444955 4d5f5020 73616d70 rm MEDIUM_P samp │ │ │ │ + 0x00d386c0 6c657232 44417272 61792075 5f636f6c ler2DArray u_col │ │ │ │ + 0x00d386d0 6f725465 783b200a 2020696e 20766563 orTex; . in vec │ │ │ │ + 0x00d386e0 3320765f 74657843 6f6f7264 733b200a 3 v_texCoords; . │ │ │ │ + 0x00d386f0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d38700 67436f6c 6f723b20 0a202063 6f6e7374 gColor; . const │ │ │ │ + 0x00d38710 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d38720 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d38730 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ + 0x00d38740 29200a20 207b200a 20202020 765f4672 ) . { . v_Fr │ │ │ │ + 0x00d38750 6167436f 6c6f7220 3d207465 78747572 agColor = textur │ │ │ │ + 0x00d38760 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d38770 74657843 6f6f7264 73293b20 0a20207d texCoords); . } │ │ │ │ + 0x00d38780 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d38790 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d387a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d387b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d387c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d387d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d387e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d387f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d38800 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d38810 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d38820 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d38830 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d38840 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d38850 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d38860 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d38870 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d38880 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d38890 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d388a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d388b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d388c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d388d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d388e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d388f0 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ + 0x00d38900 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ + 0x00d38910 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ + 0x00d38920 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d38930 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d38940 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d38950 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d38960 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d38970 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d38980 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d38990 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d389a0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d389b0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d389c0 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ + 0x00d389d0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d389e0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d389f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d38a00 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ + 0x00d38a10 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ + 0x00d38a20 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ + 0x00d38a30 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ + 0x00d38a40 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ + 0x00d38a50 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d38a60 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d38a70 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d38a80 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d38a90 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d38aa0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d38ab0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d38ac0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d38ad0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d38ae0 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d38af0 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d38b00 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d38b10 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d38b20 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d38b30 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d38b40 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d38b50 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d38b60 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00d38b70 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d38b80 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d38b90 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d38ba0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d38bb0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d38bc0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d38bd0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d38be0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d38bf0 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d38c00 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d38c10 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d38c20 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d38c30 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d38c40 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d38c50 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d38c60 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d38c70 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d38c80 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d38c90 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d38ca0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d38cb0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d38cc0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d38cd0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d38ce0 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d38cf0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d38d00 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d38d10 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d38d20 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d38d30 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d38d40 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d38d50 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d38d60 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d38d70 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d38d80 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d38d90 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d38da0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d38db0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d38dc0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d38dd0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d38de0 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d38df0 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d38e00 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d38e10 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d38e20 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d38e30 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d38e40 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d38e50 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d38e60 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d38e70 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d38e80 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d38e90 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d38ea0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d38eb0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d38ec0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d38ed0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d38ee0 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d38ef0 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d38f00 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d38f10 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d38f20 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d38f30 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d38f40 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d38f50 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d38f60 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00d38f70 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d38f80 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d38f90 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d38fa0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d38fb0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d38fc0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d38fd0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d38fe0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d38ff0 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ + 0x00d39000 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ + 0x00d39010 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ + 0x00d39020 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d39030 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ + 0x00d39040 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ + 0x00d39050 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ + 0x00d39060 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ + 0x00d39070 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ + 0x00d39080 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ + 0x00d39090 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d390a0 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ + 0x00d390b0 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ + 0x00d390c0 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00d390d0 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00d390e0 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ + 0x00d390f0 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ + 0x00d39100 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d39110 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d39120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d39130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d39140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d39150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d39160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d39170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d39180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d39190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d391a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d391b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d391c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d391d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d391e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d391f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d39200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d39210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d39220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d39230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d39240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d39250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d39260 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d39270 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d39280 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d39290 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00d392a0 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00d392b0 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00d392c0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d392d0 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00d392e0 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00d392f0 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00d39300 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d39310 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d39320 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d39330 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d39340 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d39350 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d39360 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d39370 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d39380 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d39390 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d393a0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d393b0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d393c0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d393d0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d393e0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d393f0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d39400 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d39410 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d39420 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d39430 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d39440 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d39450 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d39460 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d39470 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d39480 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d39490 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d394a0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d394b0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d394c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d394d0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d394e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d394f0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d39500 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d39510 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d39520 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d39530 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d39540 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d39550 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d39560 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d39570 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d39580 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d39590 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d395a0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d395b0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d395c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d395d0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d395e0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d395f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d39600 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d39610 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d39620 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d39630 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d39640 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d39650 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d39660 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d39670 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d39680 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d39690 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d396a0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d396b0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d396c0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d396d0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d396e0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d396f0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d39700 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d39710 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d39720 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d39730 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d39740 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d39750 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d39760 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d39770 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d39780 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d39790 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d397a0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d397b0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d397c0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d397d0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d397e0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d397f0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d39800 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d39810 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d39820 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d39830 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d39840 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d39850 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d39860 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d39870 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d39880 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d39890 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d398a0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d398b0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d398c0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d398d0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d398e0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d398f0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d39900 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d39910 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d39920 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d39930 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d39940 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d39950 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d39960 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d39970 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d39980 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d39990 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d399a0 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00d399b0 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00d399c0 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00d399d0 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00d399e0 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00d399f0 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00d39a00 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00d39a10 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00d39a20 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ + 0x00d39a30 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ + 0x00d39a40 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00d39a50 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ + 0x00d39a60 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ + 0x00d39a70 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d39a80 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ + 0x00d39a90 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ + 0x00d39aa0 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ + 0x00d39ab0 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ + 0x00d39ac0 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ + 0x00d39ad0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d39ae0 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ + 0x00d39af0 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ + 0x00d39b00 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ + 0x00d39b10 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ + 0x00d39b20 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ + 0x00d39b30 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ + 0x00d39b40 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ + 0x00d39b50 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ + 0x00d39b60 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d39b70 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ + 0x00d39b80 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ + 0x00d39b90 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ + 0x00d39ba0 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ + 0x00d39bb0 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ + 0x00d39bc0 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ + 0x00d39bd0 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ + 0x00d39be0 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ + 0x00d39bf0 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ + 0x00d39c00 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ + 0x00d39c10 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d39c20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d39c30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d39c40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d39c50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d39c60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d39c70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d39c80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d39c90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d39ca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d39cb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d39cc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d39cd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d39ce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d39cf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d39d00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d39d10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d39d20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d39d30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d39d40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d39d50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d39d60 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d39d70 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d39d80 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d39d90 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d39da0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d39db0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00d39dc0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d39dd0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d39de0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d39df0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00d39e00 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00d39e10 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d39e20 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d39e30 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d39e40 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d39e50 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d39e60 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d39e70 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d39e80 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d39e90 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d39ea0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d39eb0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d39ec0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d39ed0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d39ee0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d39ef0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d39f00 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d39f10 50617373 3b200a20 20756e69 666f726d Pass; . uniform │ │ │ │ + 0x00d39f20 2073616d 706c6572 32442075 5f6d6173 sampler2D u_mas │ │ │ │ + 0x00d39f30 6b546578 3b200a20 20636f6e 73742066 kTex; . const f │ │ │ │ + 0x00d39f40 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d39f50 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d39f60 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d39f70 0a20207b 200a2020 23696664 65662045 . { . #ifdef E │ │ │ │ + 0x00d39f80 4e41424c 455f5654 46200a20 2020204c NABLE_VTF . L │ │ │ │ + 0x00d39f90 4f575f50 20766563 3420636f 6c6f7220 OW_P vec4 color │ │ │ │ + 0x00d39fa0 3d20765f 636f6c6f 723b200a 20202365 = v_color; . #e │ │ │ │ + 0x00d39fb0 6c736520 0a202020 204c4f57 5f502076 lse . LOW_P v │ │ │ │ + 0x00d39fc0 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ + 0x00d39fd0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d39fe0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d39ff0 293b200a 20202365 6e646966 200a2020 ); . #endif . │ │ │ │ + 0x00d3a000 2020636f 6c6f7220 2a3d2074 65787475 color *= textu │ │ │ │ + 0x00d3a010 72652875 5f6d6173 6b546578 2c20765f re(u_maskTex, v_ │ │ │ │ + 0x00d3a020 6d61736b 54657843 6f6f7264 73293b20 maskTexCoords); │ │ │ │ + 0x00d3a030 0a202020 20636f6c 6f722e61 202a3d20 . color.a *= │ │ │ │ + 0x00d3a040 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d3a050 765f4672 6167436f 6c6f7220 3d20636f v_FragColor = co │ │ │ │ + 0x00d3a060 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00d3a070 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d3a080 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3a090 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3a0a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3a0b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3a0c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3a0d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3a0e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3a0f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3a100 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3a110 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3a120 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3a130 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3a140 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3a150 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3a160 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3a170 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3a180 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3a190 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3a1a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3a1b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3a1c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3a1d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d3a1e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d3a1f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d3a200 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d3a210 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d3a220 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d3a230 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d3a240 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d3a250 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d3a260 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d3a270 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d3a280 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d3a290 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d3a2a0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d3a2b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d3a2c0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d3a2d0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d3a2e0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d3a2f0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d3a300 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d3a310 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d3a320 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d3a330 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d3a340 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d3a350 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d3a360 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d3a370 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d3a380 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d3a390 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d3a3a0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d3a3b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d3a3c0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d3a3d0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d3a3e0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d3a3f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d3a400 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d3a410 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d3a420 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d3a430 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d3a440 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d3a450 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d3a460 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d3a470 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d3a480 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d3a490 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d3a4a0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d3a4b0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d3a4c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d3a4d0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d3a4e0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d3a4f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d3a500 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d3a510 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d3a520 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d3a530 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d3a540 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d3a550 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d3a560 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d3a570 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d3a580 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d3a590 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d3a5a0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d3a5b0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d3a5c0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d3a5d0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d3a5e0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d3a5f0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d3a600 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d3a610 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d3a620 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d3a630 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d3a640 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d3a650 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d3a660 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d3a670 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d3a680 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d3a690 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d3a6a0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d3a6b0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d3a6c0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d3a6d0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d3a6e0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d3a6f0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d3a700 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d3a710 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d3a720 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d3a730 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d3a740 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d3a750 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d3a760 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d3a770 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d3a780 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d3a790 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d3a7a0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d3a7b0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d3a7c0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d3a7d0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d3a7e0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d3a7f0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d3a800 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d3a810 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d3a820 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d3a830 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d3a840 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d3a850 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d3a860 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d3a870 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d3a880 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d3a890 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d3a8a0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d3a8b0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d3a8c0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d3a8d0 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ + 0x00d3a8e0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ + 0x00d3a8f0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00d3a900 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00d3a910 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00d3a920 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00d3a930 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d3a940 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d3a950 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d3a960 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00d3a970 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00d3a980 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d3a990 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00d3a9a0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d3a9b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d3a9c0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00d3a9d0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00d3a9e0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00d3a9f0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00d3aa00 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00d3aa10 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00d3aa20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3aa30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3aa40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3aa50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3aa60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3aa70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3aa80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3aa90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3aaa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3aab0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3aac0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3aad0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3aae0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3aaf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3ab00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3ab10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3ab20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3ab30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3ab40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3ab50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3ab60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3ab70 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d3ab80 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d3ab90 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d3aba0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d3abb0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00d3abc0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00d3abd0 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00d3abe0 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00d3abf0 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00d3ac00 69666f72 6d207665 63322075 5f636f6e iform vec2 u_con │ │ │ │ + 0x00d3ac10 74726173 7447616d 6d613b20 0a202075 trastGamma; . u │ │ │ │ + 0x00d3ac20 6e69666f 726d2066 6c6f6174 20755f6f niform float u_o │ │ │ │ + 0x00d3ac30 70616369 74793b20 0a202075 6e69666f pacity; . unifo │ │ │ │ + 0x00d3ac40 726d2066 6c6f6174 20755f7a 5363616c rm float u_zScal │ │ │ │ + 0x00d3ac50 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00d3ac60 6f617420 755f696e 74657270 6f6c6174 oat u_interpolat │ │ │ │ + 0x00d3ac70 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d3ac80 666c6f61 7420755f 69734f75 746c696e float u_isOutlin │ │ │ │ + 0x00d3ac90 65506173 733b200a 2020756e 69666f72 ePass; . unifor │ │ │ │ + 0x00d3aca0 6d207361 6d706c65 72324420 755f636f m sampler2D u_co │ │ │ │ + 0x00d3acb0 6c6f7254 65783b20 0a202063 6f6e7374 lorTex; . const │ │ │ │ + 0x00d3acc0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d3acd0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d3ace0 303b200a 2020766f 6964206d 61696e28 0; . void main( │ │ │ │ + 0x00d3acf0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d3ad00 2066696e 616c436f 6c6f7220 3d207465 finalColor = te │ │ │ │ + 0x00d3ad10 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d3ad20 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ + 0x00d3ad30 6473293b 200a2020 20206669 6e616c43 ds); . finalC │ │ │ │ + 0x00d3ad40 6f6c6f72 2e61202a 3d20755f 6f706163 olor.a *= u_opac │ │ │ │ + 0x00d3ad50 6974793b 200a2020 2020765f 46726167 ity; . v_Frag │ │ │ │ + 0x00d3ad60 436f6c6f 72203d20 66696e61 6c436f6c Color = finalCol │ │ │ │ + 0x00d3ad70 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d3ad80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3ad90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3ada0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3adb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3adc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3add0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3ade0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3adf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3ae00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3ae10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3ae20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3ae30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3ae40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3ae50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3ae60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3ae70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3ae80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3ae90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3aea0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3aeb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3aec0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3aed0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d3aee0 72643b20 0a202069 6e207665 63332076 rd; . in vec3 v │ │ │ │ + 0x00d3aef0 5f726164 6975733b 200a2020 6f757420 _radius; . out │ │ │ │ + 0x00d3af00 76656334 20765f46 72616743 6f6c6f72 vec4 v_FragColor │ │ │ │ + 0x00d3af10 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d3af20 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d3af30 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d3af40 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d3af50 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d3af60 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d3af70 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d3af80 5f747261 66666963 50617261 6d733b20 _trafficParams; │ │ │ │ + 0x00d3af90 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d3afa0 755f6f75 746c696e 65436f6c 6f723b20 u_outlineColor; │ │ │ │ + 0x00d3afb0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d3afc0 755f6c69 67687441 72726f77 436f6c6f u_lightArrowColo │ │ │ │ + 0x00d3afd0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d3afe0 63342075 5f646172 6b417272 6f77436f c4 u_darkArrowCo │ │ │ │ + 0x00d3aff0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d3b000 666c6f61 7420755f 6f75746c 696e653b float u_outline; │ │ │ │ + 0x00d3b010 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d3b020 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d3b030 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d3b040 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d3b050 20636f6e 73742066 6c6f6174 206b416e const float kAn │ │ │ │ + 0x00d3b060 7469616c 69617369 6e675468 72657368 tialiasingThresh │ │ │ │ + 0x00d3b070 6f6c6420 3d20302e 39323b20 0a202063 old = 0.92; . c │ │ │ │ + 0x00d3b080 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d3b090 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d3b0a0 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ + 0x00d3b0b0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00d3b0c0 76656334 20636f6c 6f72203d 20746578 vec4 color = tex │ │ │ │ + 0x00d3b0d0 74757265 28755f63 6f6c6f72 5465782c ture(u_colorTex, │ │ │ │ + 0x00d3b0e0 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d3b0f0 293b200a 20202020 666c6f61 7420736d ); . float sm │ │ │ │ + 0x00d3b100 616c6c52 61646975 73203d20 765f7261 allRadius = v_ra │ │ │ │ + 0x00d3b110 64697573 2e7a202a 206b416e 7469616c dius.z * kAntial │ │ │ │ + 0x00d3b120 69617369 6e675468 72657368 6f6c643b iasingThreshold; │ │ │ │ + 0x00d3b130 200a2020 2020666c 6f617420 73746570 . float step │ │ │ │ + 0x00d3b140 56616c75 65203d20 736d6f6f 74687374 Value = smoothst │ │ │ │ + 0x00d3b150 65702873 6d616c6c 52616469 7573202a ep(smallRadius * │ │ │ │ + 0x00d3b160 20736d61 6c6c5261 64697573 2c20765f smallRadius, v_ │ │ │ │ + 0x00d3b170 72616469 75732e7a 202a2076 5f726164 radius.z * v_rad │ │ │ │ + 0x00d3b180 6975732e 7a2c200a 20202020 20202020 ius.z, . │ │ │ │ + 0x00d3b190 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d3b1a0 20202020 20202020 20765f72 61646975 v_radiu │ │ │ │ + 0x00d3b1b0 732e7820 2a20765f 72616469 75732e78 s.x * v_radius.x │ │ │ │ + 0x00d3b1c0 202b2076 5f726164 6975732e 79202a20 + v_radius.y * │ │ │ │ + 0x00d3b1d0 765f7261 64697573 2e79293b 200a2020 v_radius.y); . │ │ │ │ + 0x00d3b1e0 2020636f 6c6f722e 61203d20 755f6f70 color.a = u_op │ │ │ │ + 0x00d3b1f0 61636974 79202a20 28312e30 202d2073 acity * (1.0 - s │ │ │ │ + 0x00d3b200 74657056 616c7565 293b200a 20202020 tepValue); . │ │ │ │ + 0x00d3b210 69662028 636f6c6f 722e6120 3c20302e if (color.a < 0. │ │ │ │ + 0x00d3b220 30312920 0a202020 20202064 69736361 01) . disca │ │ │ │ + 0x00d3b230 72643b20 0a202020 20765f46 72616743 rd; . v_FragC │ │ │ │ + 0x00d3b240 6f6c6f72 203d2063 6f6c6f72 3b200a20 olor = color; . │ │ │ │ + 0x00d3b250 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d3b260 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3b270 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3b280 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3b290 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3b2a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3b2b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3b2c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3b2d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3b2e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3b2f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3b300 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3b310 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3b320 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3b330 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3b340 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3b350 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3b360 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3b370 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3b380 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3b390 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3b3a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3b3b0 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00d3b3c0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00d3b3d0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d3b3e0 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d3b3f0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d3b400 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d3b410 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d3b420 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d3b430 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d3b440 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d3b450 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00d3b460 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d3b470 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d3b480 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00d3b490 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00d3b4a0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00d3b4b0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00d3b4c0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00d3b4d0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00d3b4e0 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00d3b4f0 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00d3b500 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00d3b510 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00d3b520 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00d3b530 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00d3b540 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00d3b550 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00d3b560 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00d3b570 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00d3b580 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d3b590 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00d3b5a0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00d3b5b0 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00d3b5c0 323b200a 2020666c 6f617420 616c7068 2; . float alph │ │ │ │ + 0x00d3b5d0 6146726f 6d506174 7465726e 28666c6f aFromPattern(flo │ │ │ │ + 0x00d3b5e0 61742063 75724c65 6e2c2066 6c6f6174 at curLen, float │ │ │ │ + 0x00d3b5f0 20646173 684c656e 2c20666c 6f617420 dashLen, float │ │ │ │ + 0x00d3b600 6761704c 656e2920 0a20207b 200a2020 gapLen) . { . │ │ │ │ + 0x00d3b610 2020666c 6f617420 6c656e20 3d206461 float len = da │ │ │ │ + 0x00d3b620 73684c65 6e202b20 6761704c 656e3b20 shLen + gapLen; │ │ │ │ + 0x00d3b630 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00d3b640 74203d20 66726163 74286375 724c656e t = fract(curLen │ │ │ │ + 0x00d3b650 202f206c 656e2920 2a206c65 6e3b200a / len) * len; . │ │ │ │ + 0x00d3b660 20202020 72657475 726e2073 74657028 return step( │ │ │ │ + 0x00d3b670 6f666673 65742c20 64617368 4c656e29 offset, dashLen) │ │ │ │ + 0x00d3b680 3b200a20 207d200a 2020636f 6e737420 ; . } . const │ │ │ │ + 0x00d3b690 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d3b6a0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d3b6b0 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d3b6c0 200a2020 7b200a20 20202069 66202876 . { . if (v │ │ │ │ + 0x00d3b6d0 5f6c656e 6774682e 78203c20 765f6c65 _length.x < v_le │ │ │ │ + 0x00d3b6e0 6e677468 2e7a2920 0a202020 20202064 ngth.z) . d │ │ │ │ + 0x00d3b6f0 69736361 72643b20 0a202020 20766563 iscard; . vec │ │ │ │ + 0x00d3b700 3220636f 65667320 3d207374 65702876 2 coefs = step(v │ │ │ │ + 0x00d3b710 5f6c656e 6774682e 78782c20 755f6661 _length.xx, u_fa │ │ │ │ + 0x00d3b720 6b65426f 72646572 73293b20 0a202020 keBorders); . │ │ │ │ + 0x00d3b730 20636f65 66732e79 203d2031 2e30202d coefs.y = 1.0 - │ │ │ │ + 0x00d3b740 20636f65 66732e79 3b200a20 20202076 coefs.y; . v │ │ │ │ + 0x00d3b750 65633420 6d61696e 436f6c6f 72203d20 ec4 mainColor = │ │ │ │ + 0x00d3b760 6d697828 755f636f 6c6f722c 20755f66 mix(u_color, u_f │ │ │ │ + 0x00d3b770 616b6543 6f6c6f72 2c20636f 6566732e akeColor, coefs. │ │ │ │ + 0x00d3b780 78293b20 0a202020 206d6169 6e436f6c x); . mainCol │ │ │ │ + 0x00d3b790 6f72203d 206d6978 286d6169 6e436f6c or = mix(mainCol │ │ │ │ + 0x00d3b7a0 6f722c20 755f6661 6b65436f 6c6f722c or, u_fakeColor, │ │ │ │ + 0x00d3b7b0 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00d3b7c0 76656334 20636f6c 6f72203d 206d6169 vec4 color = mai │ │ │ │ + 0x00d3b7d0 6e436f6c 6f72202b 20765f63 6f6c6f72 nColor + v_color │ │ │ │ + 0x00d3b7e0 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ + 0x00d3b7f0 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ + 0x00d3b800 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ + 0x00d3b810 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ + 0x00d3b820 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ + 0x00d3b830 2929202a 200a2020 20202020 20202020 )) * . │ │ │ │ + 0x00d3b840 20202020 2020616c 70686146 726f6d50 alphaFromP │ │ │ │ + 0x00d3b850 61747465 726e2876 5f6c656e 6774682e attern(v_length. │ │ │ │ + 0x00d3b860 782c2075 5f706174 7465726e 2e782c20 x, u_pattern.x, │ │ │ │ + 0x00d3b870 755f7061 74746572 6e2e7929 3b200a20 u_pattern.y); . │ │ │ │ + 0x00d3b880 20202063 6f6c6f72 203d2076 65633428 color = vec4( │ │ │ │ + 0x00d3b890 6d697828 636f6c6f 722e7267 622c2075 mix(color.rgb, u │ │ │ │ + 0x00d3b8a0 5f6d6173 6b436f6c 6f722e72 67622c20 _maskColor.rgb, │ │ │ │ + 0x00d3b8b0 755f6d61 736b436f 6c6f722e 61292c20 u_maskColor.a), │ │ │ │ + 0x00d3b8c0 636f6c6f 722e6129 3b200a20 20202076 color.a); . v │ │ │ │ + 0x00d3b8d0 5f467261 67436f6c 6f72203d 20636f6c _FragColor = col │ │ │ │ + 0x00d3b8e0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00d3b8f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d3b900 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3b910 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3b920 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3b930 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3b940 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3b950 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3b960 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3b970 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3b980 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3b990 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3b9a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3b9b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3b9c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3b9d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3b9e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3b9f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3ba00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3ba10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3ba20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3ba30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3ba40 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d3ba50 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d3ba60 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d3ba70 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d3ba80 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d3ba90 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d3baa0 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d3bab0 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d3bac0 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00d3bad0 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00d3bae0 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d3baf0 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00d3bb00 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00d3bb10 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00d3bb20 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00d3bb30 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d3bb40 206d6174 3420755f 7069766f 74547261 mat4 u_pivotTra │ │ │ │ + 0x00d3bb50 6e73666f 726d3b20 0a202075 6e69666f nsform; . unifo │ │ │ │ + 0x00d3bb60 726d2076 65633220 755f636f 6e747261 rm vec2 u_contra │ │ │ │ + 0x00d3bb70 73744761 6d6d613b 200a2020 756e6966 stGamma; . unif │ │ │ │ + 0x00d3bb80 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00d3bb90 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00d3bba0 666c6f61 7420755f 7a536361 6c653b20 float u_zScale; │ │ │ │ + 0x00d3bbb0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d3bbc0 20755f69 6e746572 706f6c61 74696f6e u_interpolation │ │ │ │ + 0x00d3bbd0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d3bbe0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d3bbf0 73733b20 0a202075 6e69666f 726d2073 ss; . uniform s │ │ │ │ + 0x00d3bc00 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00d3bc10 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d3bc20 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d3bc30 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d3bc40 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d3bc50 207b200a 20202369 66646566 20454e41 { . #ifdef ENA │ │ │ │ + 0x00d3bc60 424c455f 56544620 0a202020 204c4f57 BLE_VTF . LOW │ │ │ │ + 0x00d3bc70 5f502076 65633420 676c7970 68436f6c _P vec4 glyphCol │ │ │ │ + 0x00d3bc80 6f72203d 20765f63 6f6c6f72 3b200a20 or = v_color; . │ │ │ │ + 0x00d3bc90 2023656c 7365200a 20202020 4c4f575f #else . LOW_ │ │ │ │ + 0x00d3bca0 50207665 63342067 6c797068 436f6c6f P vec4 glyphColo │ │ │ │ + 0x00d3bcb0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d3bcc0 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ + 0x00d3bcd0 6578436f 6f726429 3b200a20 2023656e exCoord); . #en │ │ │ │ + 0x00d3bce0 64696620 0a202020 20666c6f 61742064 dif . float d │ │ │ │ + 0x00d3bcf0 69737420 3d207465 78747572 6528755f ist = texture(u_ │ │ │ │ + 0x00d3bd00 6d61736b 5465782c 20765f6d 61736b54 maskTex, v_maskT │ │ │ │ + 0x00d3bd10 6578436f 6f726429 2e723b20 0a202020 exCoord).r; . │ │ │ │ + 0x00d3bd20 20666c6f 61742061 6c706861 203d2073 float alpha = s │ │ │ │ + 0x00d3bd30 6d6f6f74 68737465 7028755f 636f6e74 moothstep(u_cont │ │ │ │ + 0x00d3bd40 72617374 47616d6d 612e7820 2d20755f rastGamma.x - u_ │ │ │ │ + 0x00d3bd50 636f6e74 72617374 47616d6d 612e792c contrastGamma.y, │ │ │ │ + 0x00d3bd60 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00d3bd70 2e78202b 20755f63 6f6e7472 61737447 .x + u_contrastG │ │ │ │ + 0x00d3bd80 616d6d61 2e792c20 64697374 29202a20 amma.y, dist) * │ │ │ │ + 0x00d3bd90 755f6f70 61636974 793b200a 20202020 u_opacity; . │ │ │ │ + 0x00d3bda0 676c7970 68436f6c 6f722e61 202a3d20 glyphColor.a *= │ │ │ │ + 0x00d3bdb0 616c7068 613b200a 20202020 765f4672 alpha; . v_Fr │ │ │ │ + 0x00d3bdc0 6167436f 6c6f7220 3d20676c 79706843 agColor = glyphC │ │ │ │ + 0x00d3bdd0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d3bde0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3bdf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3be00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3be10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3be20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3be30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3be40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3be50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3be60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3be70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3be80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3be90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3bea0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3beb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3bec0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3bed0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3bee0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3bef0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3bf00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3bf10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3bf20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3bf30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d3bf40 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00d3bf50 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ + 0x00d3bf60 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ + 0x00d3bf70 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ + 0x00d3bf80 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ + 0x00d3bf90 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00d3bfa0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d3bfb0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d3bfc0 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d3bfd0 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ + 0x00d3bfe0 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ + 0x00d3bff0 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ + 0x00d3c000 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ + 0x00d3c010 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ + 0x00d3c020 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d3c030 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ + 0x00d3c040 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ + 0x00d3c050 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ + 0x00d3c060 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ + 0x00d3c070 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00d3c080 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ + 0x00d3c090 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d3c0a0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d3c0b0 31303030 2e303b20 0a202076 6f696420 1000.0; . void │ │ │ │ + 0x00d3c0c0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d3c0d0 20666c6f 6174204c 203d2064 6f742874 float L = dot(t │ │ │ │ + 0x00d3c0e0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d3c0f0 782c2076 5f636f6c 6f725465 78436f6f x, v_colorTexCoo │ │ │ │ + 0x00d3c100 72647329 2e726762 2c206b57 65696768 rds).rgb, kWeigh │ │ │ │ + 0x00d3c110 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ + 0x00d3c120 4c6c6566 74203d20 646f7428 74657874 Lleft = dot(text │ │ │ │ + 0x00d3c130 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d3c140 765f6f66 66736574 302e7879 292e7267 v_offset0.xy).rg │ │ │ │ + 0x00d3c150 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ + 0x00d3c160 20202066 6c6f6174 204c746f 70203d20 float Ltop = │ │ │ │ + 0x00d3c170 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ + 0x00d3c180 6c6f7254 65782c20 765f6f66 66736574 lorTex, v_offset │ │ │ │ + 0x00d3c190 302e7a77 292e7267 622c206b 57656967 0.zw).rgb, kWeig │ │ │ │ + 0x00d3c1a0 68747329 3b200a20 20202076 65633420 hts); . vec4 │ │ │ │ + 0x00d3c1b0 64656c74 613b200a 20202020 64656c74 delta; . delt │ │ │ │ + 0x00d3c1c0 612e7879 203d2061 6273284c 202d2076 a.xy = abs(L - v │ │ │ │ + 0x00d3c1d0 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ + 0x00d3c1e0 293b200a 20202020 76656332 20656467 ); . vec2 edg │ │ │ │ + 0x00d3c1f0 6573203d 20737465 70286b54 68726573 es = step(kThres │ │ │ │ + 0x00d3c200 686f6c64 2c206465 6c74612e 7879293b hold, delta.xy); │ │ │ │ + 0x00d3c210 200a2020 20206966 2028646f 74286564 . if (dot(ed │ │ │ │ + 0x00d3c220 6765732c 20766563 3228312e 302c2031 ges, vec2(1.0, 1 │ │ │ │ + 0x00d3c230 2e302929 203d3d20 302e3029 200a2020 .0)) == 0.0) . │ │ │ │ + 0x00d3c240 20202020 20206469 73636172 643b200a discard; . │ │ │ │ + 0x00d3c250 20202020 666c6f61 74204c72 69676874 float Lright │ │ │ │ + 0x00d3c260 203d2064 6f742874 65787475 72652875 = dot(texture(u │ │ │ │ + 0x00d3c270 5f636f6c 6f725465 782c2076 5f6f6666 _colorTex, v_off │ │ │ │ + 0x00d3c280 73657431 2e787929 2e726762 2c206b57 set1.xy).rgb, kW │ │ │ │ + 0x00d3c290 65696768 7473293b 200a2020 2020666c eights); . fl │ │ │ │ + 0x00d3c2a0 6f617420 4c626f74 746f6d20 203d2064 oat Lbottom = d │ │ │ │ + 0x00d3c2b0 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ + 0x00d3c2c0 6f725465 782c2076 5f6f6666 73657431 orTex, v_offset1 │ │ │ │ + 0x00d3c2d0 2e7a7729 2e726762 2c206b57 65696768 .zw).rgb, kWeigh │ │ │ │ + 0x00d3c2e0 7473293b 200a2020 20206465 6c74612e ts); . delta. │ │ │ │ + 0x00d3c2f0 7a77203d 20616273 284c202d 20766563 zw = abs(L - vec │ │ │ │ + 0x00d3c300 32284c72 69676874 2c204c62 6f74746f 2(Lright, Lbotto │ │ │ │ + 0x00d3c310 6d29293b 200a2020 20207665 6332206d m)); . vec2 m │ │ │ │ + 0x00d3c320 61784465 6c746120 3d206d61 78286465 axDelta = max(de │ │ │ │ + 0x00d3c330 6c74612e 78792c20 64656c74 612e7a77 lta.xy, delta.zw │ │ │ │ + 0x00d3c340 293b200a 20202020 666c6f61 74204c6c ); . float Ll │ │ │ │ + 0x00d3c350 6566746c 65667420 3d20646f 74287465 eftleft = dot(te │ │ │ │ + 0x00d3c360 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d3c370 2c20765f 6f666673 6574322e 7879292e , v_offset2.xy). │ │ │ │ + 0x00d3c380 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ + 0x00d3c390 0a202020 20666c6f 6174204c 746f7074 . float Ltopt │ │ │ │ + 0x00d3c3a0 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ + 0x00d3c3b0 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ + 0x00d3c3c0 66667365 74322e7a 77292e72 67622c20 ffset2.zw).rgb, │ │ │ │ + 0x00d3c3d0 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ + 0x00d3c3e0 64656c74 612e7a77 203d2061 62732876 delta.zw = abs(v │ │ │ │ + 0x00d3c3f0 65633228 4c6c6566 742c204c 746f7029 ec2(Lleft, Ltop) │ │ │ │ + 0x00d3c400 202d2076 65633228 4c6c6566 746c6566 - vec2(Lleftlef │ │ │ │ + 0x00d3c410 742c204c 746f7074 6f702929 3b200a20 t, Ltoptop)); . │ │ │ │ + 0x00d3c420 2020206d 61784465 6c746120 3d206d61 maxDelta = ma │ │ │ │ + 0x00d3c430 78286d61 7844656c 74612e78 792c2064 x(maxDelta.xy, d │ │ │ │ + 0x00d3c440 656c7461 2e7a7729 3b200a20 20202066 elta.zw); . f │ │ │ │ + 0x00d3c450 6c6f6174 2066696e 616c4465 6c746120 loat finalDelta │ │ │ │ + 0x00d3c460 3d206d61 78286d61 7844656c 74612e78 = max(maxDelta.x │ │ │ │ + 0x00d3c470 2c206d61 7844656c 74612e79 293b200a , maxDelta.y); . │ │ │ │ + 0x00d3c480 20202020 65646765 73202a3d 20737465 edges *= ste │ │ │ │ + 0x00d3c490 70286669 6e616c44 656c7461 2c20534d p(finalDelta, SM │ │ │ │ + 0x00d3c4a0 41415f4c 4f43414c 5f434f4e 54524153 AA_LOCAL_CONTRAS │ │ │ │ + 0x00d3c4b0 545f4144 41505441 54494f4e 5f464143 T_ADAPTATION_FAC │ │ │ │ + 0x00d3c4c0 544f5220 2a206465 6c74612e 7879293b TOR * delta.xy); │ │ │ │ + 0x00d3c4d0 200a2020 2020765f 46726167 436f6c6f . v_FragColo │ │ │ │ + 0x00d3c4e0 72203d20 76656334 28656467 65732c20 r = vec4(edges, │ │ │ │ + 0x00d3c4f0 302e302c 20312e30 293b200a 20207d20 0.0, 1.0); . } │ │ │ │ + 0x00d3c500 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d3c510 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d3c520 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3c530 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3c540 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3c550 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3c560 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3c570 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3c580 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3c590 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3c5a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3c5b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3c5c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3c5d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3c5e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3c5f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3c600 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3c610 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3c620 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3c630 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3c640 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3c650 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3c660 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3c670 63342076 5f6f6666 73657473 3b200a20 c4 v_offsets; . │ │ │ │ + 0x00d3c680 20696e20 76656334 20765f63 6f6c6f72 in vec4 v_color │ │ │ │ + 0x00d3c690 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d3c6a0 46726167 436f6c6f 723b200a 2020636f FragColor; . co │ │ │ │ + 0x00d3c6b0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d3c6c0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d3c6d0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d3c6e0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d3c6f0 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d3c700 20765f63 6f6c6f72 3b200a20 20202076 v_color; . v │ │ │ │ + 0x00d3c710 65633220 72616469 75733b20 0a202020 ec2 radius; . │ │ │ │ + 0x00d3c720 20726164 6975732e 78203d20 6d617828 radius.x = max( │ │ │ │ + 0x00d3c730 302e302c 20616273 28765f6f 66667365 0.0, abs(v_offse │ │ │ │ + 0x00d3c740 74732e78 29202d20 765f6f66 66736574 ts.x) - v_offset │ │ │ │ + 0x00d3c750 732e7a29 3b200a20 20202072 61646975 s.z); . radiu │ │ │ │ + 0x00d3c760 732e7920 3d206d61 7828302e 302c2061 s.y = max(0.0, a │ │ │ │ + 0x00d3c770 62732876 5f6f6666 73657473 2e792920 bs(v_offsets.y) │ │ │ │ + 0x00d3c780 2d20765f 6f666673 6574732e 77293b20 - v_offsets.w); │ │ │ │ + 0x00d3c790 0a202020 20666c6f 6174206d 61785261 . float maxRa │ │ │ │ + 0x00d3c7a0 64697573 203d2031 2e303b20 0a202020 dius = 1.0; . │ │ │ │ + 0x00d3c7b0 20666c6f 61742061 61526164 69757320 float aaRadius │ │ │ │ + 0x00d3c7c0 3d20302e 393b200a 20202020 666c6f61 = 0.9; . floa │ │ │ │ + 0x00d3c7d0 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ + 0x00d3c7e0 6f6f7468 73746570 28616152 61646975 oothstep(aaRadiu │ │ │ │ + 0x00d3c7f0 73202a20 61615261 64697573 2c206d61 s * aaRadius, ma │ │ │ │ + 0x00d3c800 78526164 69757320 2a206d61 78526164 xRadius * maxRad │ │ │ │ + 0x00d3c810 6975732c 20646f74 28726164 6975732e ius, dot(radius. │ │ │ │ + 0x00d3c820 78792c20 72616469 75732e78 7929293b xy, radius.xy)); │ │ │ │ + 0x00d3c830 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00d3c840 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ + 0x00d3c850 61202a20 28312e30 202d2073 74657056 a * (1.0 - stepV │ │ │ │ + 0x00d3c860 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ + 0x00d3c870 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d3c880 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d3c890 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d3c8a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3c8b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3c8c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3c8d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3c8e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3c8f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3c900 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3c910 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3c920 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3c930 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3c940 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3c950 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3c960 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3c970 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3c980 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3c990 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3c9a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3c9b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3c9c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3c9d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3c9e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3c9f0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d3ca00 7264733b 200a2020 696e2076 65633220 rds; . in vec2 │ │ │ │ + 0x00d3ca10 765f6d61 736b5465 78436f6f 7264733b v_maskTexCoords; │ │ │ │ + 0x00d3ca20 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d3ca30 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d3ca40 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d3ca50 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d3ca60 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d3ca70 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d3ca80 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d3ca90 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d3caa0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d3cab0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d3cac0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d3cad0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d3cae0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d3caf0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d3cb00 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d3cb10 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d3cb20 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d3cb30 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00d3cb40 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00d3cb50 65783b20 0a202075 6e69666f 726d2073 ex; . uniform s │ │ │ │ + 0x00d3cb60 616d706c 65723244 20755f6d 61736b54 ampler2D u_maskT │ │ │ │ + 0x00d3cb70 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d3cb80 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d3cb90 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d3cba0 2020766f 6964206d 61696e28 29200a20 void main() . │ │ │ │ + 0x00d3cbb0 207b200a 20202020 76656334 2066696e { . vec4 fin │ │ │ │ + 0x00d3cbc0 616c436f 6c6f7220 3d207465 78747572 alColor = textur │ │ │ │ + 0x00d3cbd0 6528755f 636f6c6f 72546578 2c20765f e(u_colorTex, v_ │ │ │ │ + 0x00d3cbe0 636f6c6f 72546578 436f6f72 64732920 colorTexCoords) │ │ │ │ + 0x00d3cbf0 2a207465 78747572 6528755f 6d61736b * texture(u_mask │ │ │ │ + 0x00d3cc00 5465782c 20765f6d 61736b54 6578436f Tex, v_maskTexCo │ │ │ │ + 0x00d3cc10 6f726473 293b200a 20202020 66696e61 ords); . fina │ │ │ │ + 0x00d3cc20 6c436f6c 6f722e61 202a3d20 755f6f70 lColor.a *= u_op │ │ │ │ + 0x00d3cc30 61636974 793b200a 20202020 765f4672 acity; . v_Fr │ │ │ │ + 0x00d3cc40 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ + 0x00d3cc50 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ + 0x00d3cc60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3cc70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3cc80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3cc90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3cca0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3ccb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3ccc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3ccd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3cce0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3ccf0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3cd00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3cd10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3cd20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3cd30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3cd40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3cd50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3cd60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3cd70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3cd80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3cd90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3cda0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3cdb0 63342076 5f6e6f72 6d616c3b 200a2020 c4 v_normal; . │ │ │ │ + 0x00d3cdc0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00d3cdd0 46200a20 20696e20 4c4f575f 50207665 F . in LOW_P ve │ │ │ │ + 0x00d3cde0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d3cdf0 656c7365 200a2020 696e2076 65633220 else . in vec2 │ │ │ │ + 0x00d3ce00 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d3ce10 3b200a20 20756e69 666f726d 2073616d ; . uniform sam │ │ │ │ + 0x00d3ce20 706c6572 32442075 5f636f6c 6f725465 pler2D u_colorTe │ │ │ │ + 0x00d3ce30 783b200a 20202365 6e646966 200a2020 x; . #endif . │ │ │ │ + 0x00d3ce40 6f757420 76656334 20765f46 72616743 out vec4 v_FragC │ │ │ │ + 0x00d3ce50 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d3ce60 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00d3ce70 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00d3ce80 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00d3ce90 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d3cea0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d3ceb0 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00d3cec0 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00d3ced0 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00d3cee0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d3cef0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d3cf00 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00d3cf10 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00d3cf20 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00d3cf30 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d3cf40 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00d3cf50 2020636f 6e737420 666c6f61 74206161 const float aa │ │ │ │ + 0x00d3cf60 50697865 6c73436f 756e7420 3d20322e PixelsCount = 2. │ │ │ │ + 0x00d3cf70 353b200a 2020636f 6e737420 666c6f61 5; . const floa │ │ │ │ + 0x00d3cf80 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d3cf90 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d3cfa0 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d3cfb0 7b200a20 20236966 64656620 454e4142 { . #ifdef ENAB │ │ │ │ + 0x00d3cfc0 4c455f56 5446200a 20202020 4c4f575f LE_VTF . LOW_ │ │ │ │ + 0x00d3cfd0 50207665 63342063 6f6c6f72 203d2076 P vec4 color = v │ │ │ │ + 0x00d3cfe0 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00d3cff0 200a2020 20204c4f 575f5020 76656334 . LOW_P vec4 │ │ │ │ + 0x00d3d000 20636f6c 6f72203d 20746578 74757265 color = texture │ │ │ │ + 0x00d3d010 28755f63 6f6c6f72 5465782c 20765f63 (u_colorTex, v_c │ │ │ │ + 0x00d3d020 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00d3d030 0a202023 656e6469 66200a20 20202066 . #endif . f │ │ │ │ + 0x00d3d040 6c6f6174 20723120 3d202876 5f6e6f72 loat r1 = (v_nor │ │ │ │ + 0x00d3d050 6d616c2e 7a202d20 61615069 78656c73 mal.z - aaPixels │ │ │ │ + 0x00d3d060 436f756e 7429202a 2028765f 6e6f726d Count) * (v_norm │ │ │ │ + 0x00d3d070 616c2e7a 202d2061 61506978 656c7343 al.z - aaPixelsC │ │ │ │ + 0x00d3d080 6f756e74 293b200a 20202020 666c6f61 ount); . floa │ │ │ │ + 0x00d3d090 74207232 203d2076 5f6e6f72 6d616c2e t r2 = v_normal. │ │ │ │ + 0x00d3d0a0 78202a20 765f6e6f 726d616c 2e78202b x * v_normal.x + │ │ │ │ + 0x00d3d0b0 20765f6e 6f726d61 6c2e7920 2a20765f v_normal.y * v_ │ │ │ │ + 0x00d3d0c0 6e6f726d 616c2e79 3b200a20 20202066 normal.y; . f │ │ │ │ + 0x00d3d0d0 6c6f6174 20723320 3d20765f 6e6f726d loat r3 = v_norm │ │ │ │ + 0x00d3d0e0 616c2e7a 202a2076 5f6e6f72 6d616c2e al.z * v_normal. │ │ │ │ + 0x00d3d0f0 7a3b200a 20202020 666c6f61 7420616c z; . float al │ │ │ │ + 0x00d3d100 70686120 3d206d69 78287374 65702872 pha = mix(step(r │ │ │ │ + 0x00d3d110 332c2072 32292c20 736d6f6f 74687374 3, r2), smoothst │ │ │ │ + 0x00d3d120 65702872 312c2072 332c2072 32292c20 ep(r1, r3, r2), │ │ │ │ + 0x00d3d130 765f6e6f 726d616c 2e77293b 200a2020 v_normal.w); . │ │ │ │ + 0x00d3d140 20204c4f 575f5020 76656334 2066696e LOW_P vec4 fin │ │ │ │ + 0x00d3d150 616c436f 6c6f7220 3d20636f 6c6f723b alColor = color; │ │ │ │ + 0x00d3d160 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ + 0x00d3d170 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ + 0x00d3d180 61202a20 755f6f70 61636974 79202a20 a * u_opacity * │ │ │ │ + 0x00d3d190 28312e30 202d2061 6c706861 293b200a (1.0 - alpha); . │ │ │ │ + 0x00d3d1a0 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ + 0x00d3d1b0 6f722e61 203d3d20 302e3029 200a2020 or.a == 0.0) . │ │ │ │ + 0x00d3d1c0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00d3d1d0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ + 0x00d3d1e0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ + 0x00d3d1f0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d3d200 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3d210 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3d220 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3d230 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3d240 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3d250 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3d260 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3d270 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3d280 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3d290 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3d2a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3d2b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3d2c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3d2d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3d2e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3d2f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3d300 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3d310 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3d320 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3d330 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3d340 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00d3d350 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00d3d360 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d3d370 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d3d380 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00d3d390 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d3d3a0 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00d3d3b0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d3d3c0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d3d3d0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d3d3e0 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00d3d3f0 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00d3d400 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d3d410 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d3d420 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d3d430 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ + 0x00d3d440 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ + 0x00d3d450 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ + 0x00d3d460 6f722e61 202a2076 5f696e74 656e7369 or.a * v_intensi │ │ │ │ + 0x00d3d470 7479293b 200a2020 7d200a00 00000000 ty); . } ...... │ │ │ │ + 0x00d3d480 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3d490 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3d4a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3d4b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3d4c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3d4d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3d4e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3d4f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3d500 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3d510 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3d520 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3d530 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3d540 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3d550 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3d560 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3d570 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3d580 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3d590 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3d5a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3d5b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3d5c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3d5d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d3d5e0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d3d5f0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d3d600 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d3d610 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00d3d620 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00d3d630 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00d3d640 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00d3d650 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d3d660 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d3d670 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d3d680 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d3d690 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d3d6a0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d3d6b0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d3d6c0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d3d6d0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d3d6e0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d3d6f0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d3d700 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d3d710 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d3d720 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d3d730 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d3d740 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d3d750 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d3d760 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d3d770 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d3d780 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d3d790 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d3d7a0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d3d7b0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d3d7c0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d3d7d0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d3d7e0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d3d7f0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d3d800 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d3d810 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d3d820 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d3d830 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d3d840 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d3d850 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d3d860 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d3d870 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d3d880 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d3d890 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d3d8a0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d3d8b0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d3d8c0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d3d8d0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d3d8e0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d3d8f0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d3d900 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d3d910 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d3d920 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d3d930 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d3d940 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d3d950 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d3d960 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d3d970 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d3d980 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d3d990 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d3d9a0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d3d9b0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d3d9c0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d3d9d0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d3d9e0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d3d9f0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d3da00 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d3da10 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d3da20 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d3da30 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d3da40 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d3da50 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d3da60 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d3da70 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d3da80 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d3da90 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d3daa0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d3dab0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d3dac0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d3dad0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d3dae0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d3daf0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d3db00 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d3db10 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d3db20 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d3db30 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d3db40 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d3db50 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d3db60 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d3db70 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d3db80 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d3db90 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d3dba0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d3dbb0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d3dbc0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d3dbd0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d3dbe0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d3dbf0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d3dc00 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d3dc10 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d3dc20 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d3dc30 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d3dc40 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d3dc50 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d3dc60 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d3dc70 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d3dc80 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d3dc90 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d3dca0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d3dcb0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d3dcc0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d3dcd0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d3dce0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d3dcf0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d3dd00 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d3dd10 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d3dd20 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d3dd30 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d3dd40 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d3dd50 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d3dd60 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00d3dd70 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d3dd80 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d3dd90 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d3dda0 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00d3ddb0 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ + 0x00d3ddc0 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ + 0x00d3ddd0 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ + 0x00d3dde0 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d3ddf0 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ + 0x00d3de00 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00d3de10 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d3de20 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d3de30 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00d3de40 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00d3de50 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00d3de60 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ + 0x00d3de70 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ + 0x00d3de80 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ + 0x00d3de90 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ + 0x00d3dea0 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ + 0x00d3deb0 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ + 0x00d3dec0 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ + 0x00d3ded0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d3dee0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3def0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3df00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3df10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3df20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3df30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3df40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3df50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3df60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3df70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3df80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3df90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3dfa0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3dfb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3dfc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3dfd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3dfe0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3dff0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3e000 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3e010 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3e020 2023656e 64696620 0a202069 6e20666c #endif . in fl │ │ │ │ + 0x00d3e030 6f617420 765f696e 74656e73 6974793b oat v_intensity; │ │ │ │ + 0x00d3e040 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00d3e050 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00d3e060 666f726d 206d6174 3420755f 7472616e form mat4 u_tran │ │ │ │ + 0x00d3e070 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d3e080 6d206d61 74342075 5f6e6f72 6d616c54 m mat4 u_normalT │ │ │ │ + 0x00d3e090 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d3e0a0 666f726d 20766563 3420755f 636f6c6f form vec4 u_colo │ │ │ │ + 0x00d3e0b0 723b200a 2020756e 69666f72 6d207665 r; . uniform ve │ │ │ │ + 0x00d3e0c0 63322075 5f746578 436f6f72 64466c69 c2 u_texCoordFli │ │ │ │ + 0x00d3e0d0 7070696e 673b200a 2020636f 6e737420 pping; . const │ │ │ │ + 0x00d3e0e0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d3e0f0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d3e100 3b200a20 20766f69 64206d61 696e2829 ; . void main() │ │ │ │ + 0x00d3e110 200a2020 7b200a20 20202076 5f467261 . { . v_Fra │ │ │ │ + 0x00d3e120 67436f6c 6f72203d 20766563 3428755f gColor = vec4(u_ │ │ │ │ + 0x00d3e130 636f6c6f 722e7267 622c2075 5f636f6c color.rgb, u_col │ │ │ │ + 0x00d3e140 6f722e61 202a2073 6d6f6f74 68737465 or.a * smoothste │ │ │ │ + 0x00d3e150 7028302e 372c2031 2e302c20 765f696e p(0.7, 1.0, v_in │ │ │ │ + 0x00d3e160 74656e73 69747929 293b200a 20207d20 tensity)); . } │ │ │ │ + 0x00d3e170 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d3e180 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3e190 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3e1a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3e1b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3e1c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3e1d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3e1e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3e1f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3e200 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3e210 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3e220 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3e230 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3e240 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3e250 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3e260 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3e270 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3e280 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3e290 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3e2a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3e2b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3e2c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3e2d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d3e2e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d3e2f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d3e300 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d3e310 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d3e320 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d3e330 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d3e340 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d3e350 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d3e360 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d3e370 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d3e380 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d3e390 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d3e3a0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d3e3b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d3e3c0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d3e3d0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d3e3e0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d3e3f0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d3e400 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d3e410 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d3e420 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d3e430 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d3e440 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d3e450 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d3e460 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d3e470 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d3e480 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d3e490 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d3e4a0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d3e4b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d3e4c0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d3e4d0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d3e4e0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d3e4f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d3e500 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d3e510 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d3e520 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d3e530 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d3e540 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d3e550 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d3e560 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d3e570 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d3e580 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d3e590 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d3e5a0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d3e5b0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d3e5c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d3e5d0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d3e5e0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d3e5f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d3e600 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d3e610 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d3e620 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d3e630 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d3e640 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d3e650 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d3e660 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d3e670 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d3e680 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d3e690 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d3e6a0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d3e6b0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d3e6c0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d3e6d0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d3e6e0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d3e6f0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d3e700 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d3e710 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d3e720 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d3e730 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d3e740 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d3e750 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d3e760 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d3e770 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d3e780 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d3e790 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d3e7a0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d3e7b0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d3e7c0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d3e7d0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d3e7e0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d3e7f0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d3e800 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d3e810 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d3e820 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d3e830 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d3e840 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d3e850 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d3e860 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d3e870 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d3e880 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d3e890 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d3e8a0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d3e8b0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d3e8c0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d3e8d0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d3e8e0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d3e8f0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d3e900 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d3e910 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d3e920 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d3e930 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d3e940 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d3e950 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d3e960 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d3e970 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d3e980 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d3e990 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d3e9a0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d3e9b0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d3e9c0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d3e9d0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d3e9e0 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00d3e9f0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d3ea00 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00d3ea10 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ + 0x00d3ea20 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ + 0x00d3ea30 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00d3ea40 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00d3ea50 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ + 0x00d3ea60 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ + 0x00d3ea70 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d3ea80 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ + 0x00d3ea90 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00d3eaa0 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00d3eab0 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00d3eac0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3ead0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3eae0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3eaf0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3eb00 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3eb10 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3eb20 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3eb30 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3eb40 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3eb50 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3eb60 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3eb70 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3eb80 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3eb90 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3eba0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3ebb0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3ebc0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3ebd0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3ebe0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3ebf0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3ec00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3ec10 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d3ec20 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d3ec30 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d3ec40 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d3ec50 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d3ec60 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ + 0x00d3ec70 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ + 0x00d3ec80 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ + 0x00d3ec90 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ + 0x00d3eca0 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00d3ecb0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d3ecc0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d3ecd0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d3ece0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00d3ecf0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00d3ed00 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00d3ed10 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00d3ed20 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00d3ed30 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d3ed40 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d3ed50 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00d3ed60 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00d3ed70 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00d3ed80 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00d3ed90 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00d3eda0 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ + 0x00d3edb0 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00d3edc0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d3edd0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00d3ede0 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ + 0x00d3edf0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00d3ee00 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00d3ee10 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00d3ee20 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00d3ee30 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d3ee40 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d3ee50 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d3ee60 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00d3ee70 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d3ee80 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00d3ee90 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00d3eea0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00d3eeb0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d3eec0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00d3eed0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d3eee0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d3eef0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d3ef00 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00d3ef10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d3ef20 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00d3ef30 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00d3ef40 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d3ef50 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d3ef60 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00d3ef70 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00d3ef80 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d3ef90 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00d3efa0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00d3efb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d3efc0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d3efd0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d3efe0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d3eff0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00d3f000 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d3f010 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d3f020 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d3f030 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d3f040 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00d3f050 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00d3f060 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00d3f070 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00d3f080 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00d3f090 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d3f0a0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00d3f0b0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00d3f0c0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d3f0d0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00d3f0e0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00d3f0f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d3f100 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00d3f110 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00d3f120 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00d3f130 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d3f140 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00d3f150 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00d3f160 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00d3f170 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00d3f180 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00d3f190 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00d3f1a0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00d3f1b0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00d3f1c0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00d3f1d0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00d3f1e0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00d3f1f0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00d3f200 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d3f210 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00d3f220 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00d3f230 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00d3f240 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00d3f250 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00d3f260 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00d3f270 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00d3f280 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00d3f290 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00d3f2a0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00d3f2b0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00d3f2c0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00d3f2d0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00d3f2e0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d3f2f0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00d3f300 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00d3f310 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00d3f320 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00d3f330 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00d3f340 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00d3f350 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00d3f360 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d3f370 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00d3f380 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d3f390 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ + 0x00d3f3a0 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ + 0x00d3f3b0 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ + 0x00d3f3c0 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ + 0x00d3f3d0 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ + 0x00d3f3e0 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ + 0x00d3f3f0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00d3f400 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00d3f410 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d3f420 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ + 0x00d3f430 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ + 0x00d3f440 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ + 0x00d3f450 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ + 0x00d3f460 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d3f470 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ + 0x00d3f480 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ + 0x00d3f490 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ + 0x00d3f4a0 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ + 0x00d3f4b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d3f4c0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d3f4d0 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ + 0x00d3f4e0 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ + 0x00d3f4f0 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ + 0x00d3f500 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d3f510 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ + 0x00d3f520 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00d3f530 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ + 0x00d3f540 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00d3f550 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d3f560 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00d3f570 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00d3f580 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d3f590 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d3f5a0 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ + 0x00d3f5b0 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ + 0x00d3f5c0 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00d3f5d0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d3f5e0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d3f5f0 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ + 0x00d3f600 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00d3f610 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d3f620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d3f630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d3f640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d3f650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d3f660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d3f670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d3f680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d3f690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d3f6a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d3f6b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d3f6c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d3f6d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d3f6e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d3f6f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d3f700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d3f710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d3f720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d3f730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d3f740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d3f750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d3f760 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d3f770 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d3f780 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d3f790 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00d3f7a0 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00d3f7b0 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00d3f7c0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d3f7d0 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00d3f7e0 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d3f7f0 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00d3f800 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d3f810 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d3f820 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d3f830 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d3f840 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d3f850 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d3f860 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d3f870 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d3f880 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d3f890 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d3f8a0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d3f8b0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d3f8c0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d3f8d0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d3f8e0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d3f8f0 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00d3f900 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00d3f910 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d3f920 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00d3f930 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00d3f940 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d3f950 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d3f960 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d3f970 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d3f980 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d3f990 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d3f9a0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d3f9b0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d3f9c0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d3f9d0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d3f9e0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d3f9f0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d3fa00 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d3fa10 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d3fa20 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d3fa30 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d3fa40 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d3fa50 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d3fa60 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d3fa70 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d3fa80 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d3fa90 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d3faa0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d3fab0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d3fac0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d3fad0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d3fae0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d3faf0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d3fb00 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d3fb10 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d3fb20 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d3fb30 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d3fb40 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d3fb50 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d3fb60 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d3fb70 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d3fb80 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d3fb90 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d3fba0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d3fbb0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d3fbc0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d3fbd0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d3fbe0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d3fbf0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d3fc00 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d3fc10 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d3fc20 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d3fc30 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d3fc40 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d3fc50 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d3fc60 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d3fc70 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d3fc80 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d3fc90 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d3fca0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d3fcb0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d3fcc0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d3fcd0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d3fce0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d3fcf0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d3fd00 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d3fd10 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d3fd20 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d3fd30 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d3fd40 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d3fd50 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d3fd60 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d3fd70 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d3fd80 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d3fd90 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d3fda0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d3fdb0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d3fdc0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d3fdd0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d3fde0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d3fdf0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d3fe00 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d3fe10 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d3fe20 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d3fe30 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d3fe40 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d3fe50 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d3fe60 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d3fe70 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d3fe80 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d3fe90 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d3fea0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d3feb0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d3fec0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d3fed0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d3fee0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d3fef0 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ + 0x00d3ff00 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ + 0x00d3ff10 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00d3ff20 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00d3ff30 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00d3ff40 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d3ff50 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ + 0x00d3ff60 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00d3ff70 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ + 0x00d3ff80 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d3ff90 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ + 0x00d3ffa0 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ + 0x00d3ffb0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d3ffc0 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00d3ffd0 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00d3ffe0 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ + 0x00d3fff0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d40000 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d40010 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d40020 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d40030 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d40040 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d40050 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d40060 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d40070 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d40080 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d40090 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d400a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d400b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d400c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d400d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d400e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d400f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d40100 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d40110 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d40120 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d40130 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d40140 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d40150 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ + 0x00d40160 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ + 0x00d40170 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ + 0x00d40180 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ + 0x00d40190 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ + 0x00d401a0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00d401b0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00d401c0 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ + 0x00d401d0 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ + 0x00d401e0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00d401f0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00d40200 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00d40210 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ + 0x00d40220 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d40230 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ + 0x00d40240 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ + 0x00d40250 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ + 0x00d40260 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ + 0x00d40270 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ + 0x00d40280 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ + 0x00d40290 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ + 0x00d402a0 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ + 0x00d402b0 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ + 0x00d402c0 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ + 0x00d402d0 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ + 0x00d402e0 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ + 0x00d402f0 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ + 0x00d40300 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ + 0x00d40310 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ + 0x00d40320 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ + 0x00d40330 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ + 0x00d40340 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ + 0x00d40350 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d40360 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ + 0x00d40370 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ + 0x00d40380 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ + 0x00d40390 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ + 0x00d403a0 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ + 0x00d403b0 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d403c0 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ + 0x00d403d0 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ + 0x00d403e0 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ + 0x00d403f0 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ + 0x00d40400 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ + 0x00d40410 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ + 0x00d40420 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ + 0x00d40430 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ + 0x00d40440 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ + 0x00d40450 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ + 0x00d40460 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ + 0x00d40470 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ + 0x00d40480 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ + 0x00d40490 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ + 0x00d404a0 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ + 0x00d404b0 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ + 0x00d404c0 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ + 0x00d404d0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d404e0 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ + 0x00d404f0 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ + 0x00d40500 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ + 0x00d40510 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ + 0x00d40520 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ + 0x00d40530 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ + 0x00d40540 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ + 0x00d40550 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ + 0x00d40560 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ + 0x00d40570 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ + 0x00d40580 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ + 0x00d40590 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ + 0x00d405a0 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ + 0x00d405b0 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ + 0x00d405c0 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ + 0x00d405d0 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ + 0x00d405e0 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ + 0x00d405f0 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ + 0x00d40600 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ + 0x00d40610 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ + 0x00d40620 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ + 0x00d40630 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ + 0x00d40640 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00d40650 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ + 0x00d40660 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ + 0x00d40670 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ + 0x00d40680 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ + 0x00d40690 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00d406a0 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00d406b0 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00d406c0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00d406d0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00d406e0 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ + 0x00d406f0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00d40700 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d40710 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00d40720 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00d40730 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00d40740 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00d40750 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00d40760 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00d40770 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ + 0x00d40780 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00d40790 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ + 0x00d407a0 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ + 0x00d407b0 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ + 0x00d407c0 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ + 0x00d407d0 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ + 0x00d407e0 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ + 0x00d407f0 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ + 0x00d40800 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00d40810 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00d40820 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d40830 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00d40840 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ + 0x00d40850 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00d40860 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00d40870 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00d40880 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00d40890 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00d408a0 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ + 0x00d408b0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00d408c0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00d408d0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00d408e0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00d408f0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00d40900 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00d40910 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00d40920 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00d40930 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ + 0x00d40940 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ + 0x00d40950 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ + 0x00d40960 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ + 0x00d40970 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ + 0x00d40980 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ + 0x00d40990 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ + 0x00d409a0 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ + 0x00d409b0 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ + 0x00d409c0 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ + 0x00d409d0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00d409e0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d409f0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00d40a00 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ + 0x00d40a10 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ + 0x00d40a20 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ + 0x00d40a30 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ + 0x00d40a40 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ + 0x00d40a50 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ + 0x00d40a60 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ + 0x00d40a70 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ + 0x00d40a80 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ + 0x00d40a90 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ + 0x00d40aa0 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ + 0x00d40ab0 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ + 0x00d40ac0 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ + 0x00d40ad0 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ + 0x00d40ae0 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ + 0x00d40af0 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ + 0x00d40b00 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d40b10 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ + 0x00d40b20 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ + 0x00d40b30 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ + 0x00d40b40 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ + 0x00d40b50 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ + 0x00d40b60 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ + 0x00d40b70 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ + 0x00d40b80 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00d40b90 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ + 0x00d40ba0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00d40bb0 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ + 0x00d40bc0 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ + 0x00d40bd0 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ + 0x00d40be0 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ + 0x00d40bf0 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ + 0x00d40c00 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ + 0x00d40c10 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ + 0x00d40c20 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ + 0x00d40c30 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ + 0x00d40c40 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ + 0x00d40c50 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ + 0x00d40c60 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ + 0x00d40c70 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ + 0x00d40c80 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ + 0x00d40c90 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ + 0x00d40ca0 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ + 0x00d40cb0 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ + 0x00d40cc0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00d40cd0 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ + 0x00d40ce0 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ + 0x00d40cf0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00d40d00 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ + 0x00d40d10 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ + 0x00d40d20 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ + 0x00d40d30 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ + 0x00d40d40 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ + 0x00d40d50 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ + 0x00d40d60 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ + 0x00d40d70 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ + 0x00d40d80 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ + 0x00d40d90 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ + 0x00d40da0 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ + 0x00d40db0 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ + 0x00d40dc0 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ + 0x00d40dd0 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ + 0x00d40de0 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ + 0x00d40df0 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ + 0x00d40e00 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ + 0x00d40e10 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ + 0x00d40e20 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ + 0x00d40e30 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ + 0x00d40e40 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ + 0x00d40e50 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ + 0x00d40e60 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ + 0x00d40e70 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ + 0x00d40e80 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d40e90 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d40ea0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d40eb0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d40ec0 65633420 77656967 68747320 3d207665 ec4 weights = ve │ │ │ │ + 0x00d40ed0 63342830 2e302c20 302e302c 20302e30 c4(0.0, 0.0, 0.0 │ │ │ │ + 0x00d40ee0 2c20302e 30293b20 0a202020 20766563 , 0.0); . vec │ │ │ │ + 0x00d40ef0 32206520 3d207465 78747572 6528755f 2 e = texture(u_ │ │ │ │ + 0x00d40f00 636f6c6f 72546578 2c20765f 636f6f72 colorTex, v_coor │ │ │ │ + 0x00d40f10 64732e78 79292e72 673b200a 20202020 ds.xy).rg; . │ │ │ │ + 0x00d40f20 69662028 652e6720 3e20302e 3029202f if (e.g > 0.0) / │ │ │ │ + 0x00d40f30 2f204564 67652061 74206e6f 72746820 / Edge at north │ │ │ │ + 0x00d40f40 0a202020 207b200a 20202020 20207665 . { . ve │ │ │ │ + 0x00d40f50 63322064 3b200a20 20202020 20766563 c2 d; . vec │ │ │ │ + 0x00d40f60 3320636f 6f726473 3b200a20 20202020 3 coords; . │ │ │ │ + 0x00d40f70 20636f6f 7264732e 78203d20 534d4141 coords.x = SMAA │ │ │ │ + 0x00d40f80 53656172 6368584c 65667428 765f6f66 SearchXLeft(v_of │ │ │ │ + 0x00d40f90 66736574 302e7879 2c20765f 6f666673 fset0.xy, v_offs │ │ │ │ + 0x00d40fa0 6574322e 78293b20 0a202020 20202063 et2.x); . c │ │ │ │ + 0x00d40fb0 6f6f7264 732e7920 3d20765f 6f666673 oords.y = v_offs │ │ │ │ + 0x00d40fc0 6574312e 793b200a 20202020 2020642e et1.y; . d. │ │ │ │ + 0x00d40fd0 78203d20 636f6f72 64732e78 3b200a20 x = coords.x; . │ │ │ │ + 0x00d40fe0 20202020 20666c6f 61742065 31203d20 float e1 = │ │ │ │ + 0x00d40ff0 534d4141 53616d70 6c654c65 76656c5a SMAASampleLevelZ │ │ │ │ + 0x00d41000 65726f28 755f636f 6c6f7254 65782c20 ero(u_colorTex, │ │ │ │ + 0x00d41010 636f6f72 64732e78 79292e72 3b200a20 coords.xy).r; . │ │ │ │ + 0x00d41020 20202020 20636f6f 7264732e 7a203d20 coords.z = │ │ │ │ + 0x00d41030 534d4141 53656172 63685852 69676874 SMAASearchXRight │ │ │ │ + 0x00d41040 28765f6f 66667365 74302e7a 772c2076 (v_offset0.zw, v │ │ │ │ + 0x00d41050 5f6f6666 73657432 2e79293b 200a2020 _offset2.y); . │ │ │ │ + 0x00d41060 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ + 0x00d41070 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ + 0x00d41080 7a7a203d 20755f66 72616d65 62756666 zz = u_framebuff │ │ │ │ + 0x00d41090 65724d65 74726963 732e7a7a 3b200a20 erMetrics.zz; . │ │ │ │ + 0x00d410a0 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ + 0x00d410b0 41526f75 6e64287a 7a202a20 64202d20 ARound(zz * d - │ │ │ │ + 0x00d410c0 765f636f 6f726473 2e7a7a29 293b200a v_coords.zz)); . │ │ │ │ + 0x00d410d0 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ + 0x00d410e0 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ + 0x00d410f0 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ + 0x00d41100 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00d41110 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ + 0x00d41120 5465782c 20636f6f 7264732e 7a792c20 Tex, coords.zy, │ │ │ │ + 0x00d41130 534d4141 4f666673 65742831 2c203029 SMAAOffset(1, 0) │ │ │ │ + 0x00d41140 292e723b 200a2020 20202020 77656967 ).r; . weig │ │ │ │ + 0x00d41150 6874732e 7267203d 20534d41 41417265 hts.rg = SMAAAre │ │ │ │ + 0x00d41160 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ + 0x00d41170 293b200a 20202020 7d200a20 20202069 ); . } . i │ │ │ │ + 0x00d41180 66202865 2e72203e 20302e30 29202f2f f (e.r > 0.0) // │ │ │ │ + 0x00d41190 20456467 65206174 20776573 74200a20 Edge at west . │ │ │ │ + 0x00d411a0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00d411b0 20643b20 0a202020 20202076 65633320 d; . vec3 │ │ │ │ + 0x00d411c0 636f6f72 64733b20 0a202020 20202063 coords; . c │ │ │ │ + 0x00d411d0 6f6f7264 732e7920 3d20534d 41415365 oords.y = SMAASe │ │ │ │ + 0x00d411e0 61726368 59557028 765f6f66 66736574 archYUp(v_offset │ │ │ │ + 0x00d411f0 312e7879 2c20765f 6f666673 6574322e 1.xy, v_offset2. │ │ │ │ + 0x00d41200 7a293b20 0a202020 20202063 6f6f7264 z); . coord │ │ │ │ + 0x00d41210 732e7820 3d20765f 6f666673 6574302e s.x = v_offset0. │ │ │ │ + 0x00d41220 783b200a 20202020 2020642e 78203d20 x; . d.x = │ │ │ │ + 0x00d41230 636f6f72 64732e79 3b200a20 20202020 coords.y; . │ │ │ │ + 0x00d41240 20666c6f 61742065 31203d20 534d4141 float e1 = SMAA │ │ │ │ + 0x00d41250 53616d70 6c654c65 76656c5a 65726f28 SampleLevelZero( │ │ │ │ + 0x00d41260 755f636f 6c6f7254 65782c20 636f6f72 u_colorTex, coor │ │ │ │ + 0x00d41270 64732e78 79292e67 3b200a20 20202020 ds.xy).g; . │ │ │ │ + 0x00d41280 20636f6f 7264732e 7a203d20 534d4141 coords.z = SMAA │ │ │ │ + 0x00d41290 53656172 63685944 6f776e28 765f6f66 SearchYDown(v_of │ │ │ │ + 0x00d412a0 66736574 312e7a77 2c20765f 6f666673 fset1.zw, v_offs │ │ │ │ + 0x00d412b0 6574322e 77293b20 0a202020 20202064 et2.w); . d │ │ │ │ + 0x00d412c0 2e79203d 20636f6f 7264732e 7a3b200a .y = coords.z; . │ │ │ │ + 0x00d412d0 20202020 20207665 63322077 77203d20 vec2 ww = │ │ │ │ + 0x00d412e0 755f6672 616d6562 75666665 724d6574 u_framebufferMet │ │ │ │ + 0x00d412f0 72696373 2e77773b 200a2020 20202020 rics.ww; . │ │ │ │ + 0x00d41300 64203d20 61627328 534d4141 526f756e d = abs(SMAARoun │ │ │ │ + 0x00d41310 64287777 202a2064 202d2076 5f636f6f d(ww * d - v_coo │ │ │ │ + 0x00d41320 7264732e 77772929 3b200a20 20202020 rds.ww)); . │ │ │ │ + 0x00d41330 20766563 32207371 72745f64 203d2073 vec2 sqrt_d = s │ │ │ │ + 0x00d41340 71727428 64293b20 0a202020 20202066 qrt(d); . f │ │ │ │ + 0x00d41350 6c6f6174 20653220 3d20534d 41415361 loat e2 = SMAASa │ │ │ │ + 0x00d41360 6d706c65 4c657665 6c5a6572 6f4f6666 mpleLevelZeroOff │ │ │ │ + 0x00d41370 73657428 755f636f 6c6f7254 65782c20 set(u_colorTex, │ │ │ │ + 0x00d41380 636f6f72 64732e78 7a2c2053 4d41414f coords.xz, SMAAO │ │ │ │ + 0x00d41390 66667365 7428302c 20312929 2e673b20 ffset(0, 1)).g; │ │ │ │ + 0x00d413a0 0a202020 20202077 65696768 74732e62 . weights.b │ │ │ │ + 0x00d413b0 61203d20 534d4141 41726561 28737172 a = SMAAArea(sqr │ │ │ │ + 0x00d413c0 745f642c 2065312c 20653229 3b200a20 t_d, e1, e2); . │ │ │ │ + 0x00d413d0 2020207d 200a2020 2020765f 46726167 } . v_Frag │ │ │ │ + 0x00d413e0 436f6c6f 72203d20 77656967 6874733b Color = weights; │ │ │ │ + 0x00d413f0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d41400 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d41410 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d41420 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d41430 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d41440 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d41450 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d41460 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d41470 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d41480 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d41490 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d414a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d414b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d414c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d414d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d414e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d414f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d41500 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d41510 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d41520 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d41530 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d41540 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d41550 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d41560 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d41570 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d41580 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d41590 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d415a0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d415b0 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ + 0x00d415c0 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ + 0x00d415d0 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ + 0x00d415e0 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ + 0x00d415f0 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ + 0x00d41600 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ + 0x00d41610 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ + 0x00d41620 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d41630 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00d41640 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00d41650 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d41660 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d41670 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ + 0x00d41680 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d41690 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ + 0x00d416a0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d416b0 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ + 0x00d416c0 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ + 0x00d416d0 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ + 0x00d416e0 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ + 0x00d416f0 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ + 0x00d41700 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ + 0x00d41710 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d41720 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d41730 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d41740 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d41750 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d41760 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d41770 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d41780 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d41790 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d417a0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d417b0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d417c0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d417d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d417e0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d417f0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d41800 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d41810 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d41820 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d41830 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d41840 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d41850 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d41860 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d41870 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d41880 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d41890 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d418a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d418b0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d418c0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d418d0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d418e0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d418f0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d41900 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d41910 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d41920 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d41930 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d41940 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d41950 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d41960 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d41970 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d41980 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d41990 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d419a0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d419b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d419c0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d419d0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d419e0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d419f0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d41a00 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d41a10 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d41a20 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d41a30 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d41a40 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d41a50 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d41a60 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d41a70 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d41a80 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d41a90 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d41aa0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d41ab0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d41ac0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d41ad0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d41ae0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d41af0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d41b00 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d41b10 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d41b20 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d41b30 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d41b40 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d41b50 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d41b60 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d41b70 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d41b80 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d41b90 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d41ba0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d41bb0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d41bc0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d41bd0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d41be0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d41bf0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d41c00 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d41c10 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d41c20 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d41c30 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d41c40 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d41c50 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d41c60 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d41c70 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d41c80 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d41c90 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d41ca0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d41cb0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d41cc0 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00d41cd0 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ + 0x00d41ce0 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ + 0x00d41cf0 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ + 0x00d41d00 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ + 0x00d41d10 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00d41d20 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ + 0x00d41d30 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ + 0x00d41d40 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ + 0x00d41d50 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ + 0x00d41d60 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ + 0x00d41d70 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ + 0x00d41d80 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ + 0x00d41d90 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ + 0x00d41da0 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ + 0x00d41db0 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ + 0x00d41dc0 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ + 0x00d41dd0 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ + 0x00d41de0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d41df0 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ + 0x00d41e00 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ + 0x00d41e10 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ + 0x00d41e20 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ + 0x00d41e30 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ + 0x00d41e40 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ + 0x00d41e50 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ + 0x00d41e60 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ + 0x00d41e70 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ + 0x00d41e80 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ + 0x00d41e90 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d41ea0 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ + 0x00d41eb0 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ + 0x00d41ec0 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ + 0x00d41ed0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d41ee0 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ + 0x00d41ef0 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ + 0x00d41f00 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ + 0x00d41f10 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ + 0x00d41f20 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ + 0x00d41f30 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ + 0x00d41f40 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ + 0x00d41f50 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00d41f60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d41f70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d41f80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d41f90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d41fa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d41fb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d41fc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d41fd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d41fe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d41ff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d42000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d42010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d42020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d42030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d42040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d42050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d42060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d42070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d42080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d42090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d420a0 2023656e 64696620 0a20206f 75742076 #endif . out v │ │ │ │ + 0x00d420b0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ + 0x00d420c0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d420d0 20755f63 6f6c6f72 3b200a20 20636f6e u_color; . con │ │ │ │ + 0x00d420e0 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d420f0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d42100 302e303b 200a2020 766f6964 206d6169 0.0; . void mai │ │ │ │ + 0x00d42110 6e282920 0a20207b 200a2020 2020765f n() . { . v_ │ │ │ │ + 0x00d42120 46726167 436f6c6f 72203d20 755f636f FragColor = u_co │ │ │ │ + 0x00d42130 6c6f723b 200a2020 7d200a00 00000000 lor; . } ...... │ │ │ │ + 0x00d42140 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d42150 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d42160 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d42170 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d42180 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d42190 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d421a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d421b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d421c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d421d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d421e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d421f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d42200 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d42210 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d42220 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d42230 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d42240 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d42250 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d42260 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d42270 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d42280 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d42290 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d422a0 7264733b 200a2020 696e2066 6c6f6174 rds; . in float │ │ │ │ + 0x00d422b0 20765f69 6e74656e 73697479 3b200a20 v_intensity; . │ │ │ │ + 0x00d422c0 206f7574 20766563 3420765f 46726167 out vec4 v_Frag │ │ │ │ + 0x00d422d0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d422e0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00d422f0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00d42300 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00d42310 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d42320 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00d42330 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00d42340 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00d42350 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00d42360 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d42370 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d42380 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00d42390 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00d423a0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00d423b0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d423c0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00d423d0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d423e0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d423f0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d42400 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d42410 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d42420 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d42430 0a202020 20766563 34206669 6e616c43 . vec4 finalC │ │ │ │ + 0x00d42440 6f6c6f72 203d2076 65633428 74657874 olor = vec4(text │ │ │ │ + 0x00d42450 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d42460 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d42470 292e7267 622c2075 5f6f7061 63697479 ).rgb, u_opacity │ │ │ │ + 0x00d42480 293b200a 20202020 765f4672 6167436f ); . v_FragCo │ │ │ │ + 0x00d42490 6c6f7220 3d207665 63342828 765f696e lor = vec4((v_in │ │ │ │ + 0x00d424a0 74656e73 69747920 2a20302e 32202b20 tensity * 0.2 + │ │ │ │ + 0x00d424b0 302e3829 202a2066 696e616c 436f6c6f 0.8) * finalColo │ │ │ │ + 0x00d424c0 722e7267 622c2066 696e616c 436f6c6f r.rgb, finalColo │ │ │ │ + 0x00d424d0 722e6129 3b200a20 207d200a 00000000 r.a); . } ..... │ │ │ │ 0x00d424e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ 0x00d424f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ 0x00d42500 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ 0x00d42510 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ 0x00d42520 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ 0x00d42530 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ 0x00d42540 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ @@ -61793,1205 +61793,1205 @@ │ │ │ │ 0x00d425e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ 0x00d425f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ 0x00d42600 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ 0x00d42610 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ 0x00d42620 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ 0x00d42630 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ 0x00d42640 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d42650 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ - 0x00d42660 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00d42670 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ - 0x00d42680 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d42690 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d426a0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d426b0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d426c0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d426d0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d426e0 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ - 0x00d426f0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d42700 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ - 0x00d42710 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d42720 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ - 0x00d42730 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ - 0x00d42740 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ - 0x00d42750 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ - 0x00d42760 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ - 0x00d42770 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ - 0x00d42780 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d42790 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00d427a0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d427b0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d427c0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d427d0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d427e0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d427f0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d42800 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d42810 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d42820 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d42830 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d42840 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d42850 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d42860 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d42870 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d42880 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d42890 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d428a0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d428b0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d428c0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d428d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d428e0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d428f0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d42900 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d42910 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d42920 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d42930 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d42940 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d42950 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d42960 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d42970 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d42980 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d42990 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d429a0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d429b0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d429c0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d429d0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d429e0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d429f0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d42a00 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d42a10 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d42a20 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d42a30 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d42a40 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d42a50 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d42a60 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d42a70 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d42a80 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d42a90 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d42aa0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d42ab0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d42ac0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d42ad0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d42ae0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d42af0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d42b00 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d42b10 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d42b20 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d42b30 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d42b40 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d42b50 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d42b60 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d42b70 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d42b80 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d42b90 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d42ba0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d42bb0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d42bc0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d42bd0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d42be0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d42bf0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d42c00 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d42c10 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d42c20 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d42c30 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d42c40 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d42c50 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d42c60 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d42c70 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d42c80 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d42c90 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d42ca0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d42cb0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d42cc0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d42cd0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d42ce0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d42cf0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d42d00 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d42d10 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d42d20 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d42d30 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00d42d40 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00d42d50 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00d42d60 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00d42d70 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00d42d80 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ - 0x00d42d90 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d42da0 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ - 0x00d42db0 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ - 0x00d42dc0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d42dd0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d42de0 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00d42df0 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ - 0x00d42e00 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00d42e10 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00d42e20 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d42e30 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ - 0x00d42e40 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d42e50 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d42e60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d42e70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d42e80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d42e90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d42ea0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d42eb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d42ec0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d42ed0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d42ee0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d42ef0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d42f00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d42f10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d42f20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d42f30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d42f40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d42f50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d42f60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d42f70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d42f80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d42f90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d42fa0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d42fb0 63342076 5f636f6c 6f723b20 0a20206f c4 v_color; . o │ │ │ │ - 0x00d42fc0 75742076 65633420 765f4672 6167436f ut vec4 v_FragCo │ │ │ │ - 0x00d42fd0 6c6f723b 200a2020 636f6e73 7420666c lor; . const fl │ │ │ │ - 0x00d42fe0 6f617420 6b536861 7065436f 6f726453 oat kShapeCoordS │ │ │ │ - 0x00d42ff0 63616c61 72203d20 31303030 2e303b20 calar = 1000.0; │ │ │ │ - 0x00d43000 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00d43010 20207b20 0a202020 20765f46 72616743 { . v_FragC │ │ │ │ - 0x00d43020 6f6c6f72 203d2076 5f636f6c 6f723b20 olor = v_color; │ │ │ │ - 0x00d43030 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00d43040 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d43050 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d43060 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d43070 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d43080 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d43090 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d430a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d430b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d430c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d430d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d430e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d430f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d43100 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d43110 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d43120 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d43130 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d43140 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d43150 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d43160 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d43170 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d43180 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d43190 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d431a0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d431b0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d431c0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d431d0 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ - 0x00d431e0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d431f0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d43200 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d43210 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d43220 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d43230 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d43240 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ - 0x00d43250 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ - 0x00d43260 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ - 0x00d43270 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ - 0x00d43280 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ - 0x00d43290 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ - 0x00d432a0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d432b0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d432c0 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ - 0x00d432d0 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00d432e0 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00d432f0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00d43300 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ - 0x00d43310 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ - 0x00d43320 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d43330 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ - 0x00d43340 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ - 0x00d43350 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ - 0x00d43360 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d43370 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ - 0x00d43380 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ - 0x00d43390 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d433a0 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ - 0x00d433b0 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ - 0x00d433c0 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ - 0x00d433d0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d433e0 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ - 0x00d433f0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d43400 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d43410 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ - 0x00d43420 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ - 0x00d43430 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d43440 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ - 0x00d43450 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ - 0x00d43460 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ - 0x00d43470 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d43480 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ - 0x00d43490 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ - 0x00d434a0 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ - 0x00d434b0 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ - 0x00d434c0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d434d0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d434e0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d434f0 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ - 0x00d43500 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ - 0x00d43510 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ - 0x00d43520 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ - 0x00d43530 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ - 0x00d43540 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ - 0x00d43550 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d43560 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ - 0x00d43570 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ - 0x00d43580 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ - 0x00d43590 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ - 0x00d435a0 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ - 0x00d435b0 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ - 0x00d435c0 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ - 0x00d435d0 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ - 0x00d435e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d435f0 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ - 0x00d43600 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ - 0x00d43610 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ - 0x00d43620 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ - 0x00d43630 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ - 0x00d43640 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ - 0x00d43650 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ - 0x00d43660 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ - 0x00d43670 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ - 0x00d43680 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ - 0x00d43690 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ - 0x00d436a0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d436b0 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ - 0x00d436c0 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ - 0x00d436d0 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ - 0x00d436e0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00d436f0 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ - 0x00d43700 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ - 0x00d43710 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ - 0x00d43720 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ - 0x00d43730 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ - 0x00d43740 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ - 0x00d43750 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ - 0x00d43760 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ - 0x00d43770 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ - 0x00d43780 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ - 0x00d43790 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ - 0x00d437a0 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ - 0x00d437b0 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ - 0x00d437c0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d437d0 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ - 0x00d437e0 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ - 0x00d437f0 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ - 0x00d43800 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d43810 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ - 0x00d43820 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00d43830 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ - 0x00d43840 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ - 0x00d43850 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00d43860 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d43870 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00d43880 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00d43890 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00d438a0 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ - 0x00d438b0 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ - 0x00d438c0 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00d438d0 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00d438e0 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ - 0x00d438f0 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ - 0x00d43900 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ - 0x00d43910 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ - 0x00d43920 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00d43930 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ - 0x00d43940 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00d43950 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ - 0x00d43960 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d43970 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d43980 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d43990 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ - 0x00d439a0 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ - 0x00d439b0 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ - 0x00d439c0 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00d439d0 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00d439e0 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ - 0x00d439f0 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00d43a00 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ - 0x00d43a10 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ - 0x00d43a20 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ - 0x00d43a30 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d43a40 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ - 0x00d43a50 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ - 0x00d43a60 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00d43a70 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d43a80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d43a90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d43aa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d43ab0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d43ac0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d43ad0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d43ae0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d43af0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d43b00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d43b10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d43b20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d43b30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d43b40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d43b50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d43b60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d43b70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d43b80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d43b90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d43ba0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d43bb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d43bc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d43bd0 63332076 5f726164 6975733b 200a2020 c3 v_radius; . │ │ │ │ - 0x00d43be0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00d43bf0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00d43c00 72616743 6f6c6f72 3b200a20 20636f6e ragColor; . con │ │ │ │ - 0x00d43c10 73742066 6c6f6174 20616150 6978656c st float aaPixel │ │ │ │ - 0x00d43c20 73436f75 6e74203d 20322e35 3b200a20 sCount = 2.5; . │ │ │ │ - 0x00d43c30 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d43c40 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d43c50 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ - 0x00d43c60 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d43c70 20207665 63342066 696e616c 436f6c6f vec4 finalColo │ │ │ │ - 0x00d43c80 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ - 0x00d43c90 2020666c 6f617420 736d616c 6c526164 float smallRad │ │ │ │ - 0x00d43ca0 69757320 3d20765f 72616469 75732e7a ius = v_radius.z │ │ │ │ - 0x00d43cb0 202d2061 61506978 656c7343 6f756e74 - aaPixelsCount │ │ │ │ - 0x00d43cc0 3b200a20 20202066 6c6f6174 20737465 ; . float ste │ │ │ │ - 0x00d43cd0 7056616c 7565203d 20736d6f 6f746873 pValue = smooths │ │ │ │ - 0x00d43ce0 74657028 736d616c 6c526164 69757320 tep(smallRadius │ │ │ │ - 0x00d43cf0 2a20736d 616c6c52 61646975 732c2076 * smallRadius, v │ │ │ │ - 0x00d43d00 5f726164 6975732e 7a202a20 765f7261 _radius.z * v_ra │ │ │ │ - 0x00d43d10 64697573 2e7a2c20 0a202020 20202020 dius.z, . │ │ │ │ - 0x00d43d20 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d43d30 20202020 20202020 20646f74 28765f72 dot(v_r │ │ │ │ - 0x00d43d40 61646975 732e7879 2c20765f 72616469 adius.xy, v_radi │ │ │ │ - 0x00d43d50 75732e78 7929293b 200a2020 20206669 us.xy)); . fi │ │ │ │ - 0x00d43d60 6e616c43 6f6c6f72 2e61203d 2066696e nalColor.a = fin │ │ │ │ - 0x00d43d70 616c436f 6c6f722e 61202a20 28312e30 alColor.a * (1.0 │ │ │ │ - 0x00d43d80 202d2073 74657056 616c7565 293b200a - stepValue); . │ │ │ │ - 0x00d43d90 20202020 69662028 66696e61 6c436f6c if (finalCol │ │ │ │ - 0x00d43da0 6f722e61 203c2030 2e303129 200a2020 or.a < 0.01) . │ │ │ │ - 0x00d43db0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ - 0x00d43dc0 2020765f 46726167 436f6c6f 72203d20 v_FragColor = │ │ │ │ - 0x00d43dd0 66696e61 6c436f6c 6f723b20 0a20207d finalColor; . } │ │ │ │ - 0x00d43de0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00d43df0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d43e00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d43e10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d43e20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d43e30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d43e40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d43e50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d43e60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d43e70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d43e80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d43e90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d43ea0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d43eb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d43ec0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d43ed0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d43ee0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d43ef0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d43f00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d43f10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d43f20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d43f30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d43f40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d43f50 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d43f60 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d43f70 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d43f80 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d43f90 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00d43fa0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00d43fb0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00d43fc0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d43fd0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d43fe0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d43ff0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d44000 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d44010 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d44020 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ - 0x00d44030 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ - 0x00d44040 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ - 0x00d44050 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ - 0x00d44060 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ - 0x00d44070 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d44080 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d44090 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d440a0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d440b0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d440c0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d440d0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d440e0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d440f0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d44100 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d44110 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d44120 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d44130 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d44140 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d44150 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d44160 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d44170 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d44180 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d44190 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d441a0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d441b0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d441c0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d441d0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d441e0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d441f0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d44200 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d44210 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d44220 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d44230 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d44240 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d44250 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d44260 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d44270 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d44280 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d44290 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d442a0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d442b0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d442c0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d442d0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d442e0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d442f0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d44300 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d44310 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d44320 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d44330 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d44340 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d44350 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d44360 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d44370 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d44380 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d44390 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d443a0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d443b0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d443c0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d443d0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d443e0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d443f0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d44400 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d44410 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d44420 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d44430 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d44440 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d44450 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d44460 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d44470 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d44480 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d44490 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d444a0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d444b0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d444c0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d444d0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d444e0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d444f0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d44500 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d44510 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d44520 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d44530 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d44540 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d44550 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d44560 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d44570 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d44580 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d44590 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d445a0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d445b0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d445c0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d445d0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d445e0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d445f0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d44600 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00d44610 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ - 0x00d44620 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ - 0x00d44630 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00d44640 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00d44650 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00d44660 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00d44670 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00d44680 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ - 0x00d44690 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ - 0x00d446a0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ - 0x00d446b0 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ - 0x00d446c0 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ - 0x00d446d0 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ - 0x00d446e0 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ - 0x00d446f0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00d44700 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ - 0x00d44710 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00d44720 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ - 0x00d44730 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ - 0x00d44740 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d44750 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d44760 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ - 0x00d44770 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ - 0x00d44780 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ - 0x00d44790 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ - 0x00d447a0 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ - 0x00d447b0 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ - 0x00d447c0 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ - 0x00d447d0 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ - 0x00d447e0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d447f0 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ - 0x00d44800 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ - 0x00d44810 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ - 0x00d44820 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00d44830 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ - 0x00d44840 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00d44850 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00d44860 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00d44870 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ - 0x00d44880 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ - 0x00d44890 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ - 0x00d448a0 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ - 0x00d448b0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d448c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d448d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d448e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d448f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d44900 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d44910 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d44920 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d44930 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d44940 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d44950 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d44960 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d44970 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d44980 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d44990 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d449a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d449b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d449c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d449d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d449e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d449f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d44a00 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d44a10 63342076 5f6f6666 73657473 3b200a20 c4 v_offsets; . │ │ │ │ - 0x00d44a20 20696e20 76656334 20765f63 6f6c6f72 in vec4 v_color │ │ │ │ - 0x00d44a30 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ - 0x00d44a40 46726167 436f6c6f 723b200a 2020636f FragColor; . co │ │ │ │ - 0x00d44a50 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d44a60 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d44a70 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d44a80 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d44a90 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ - 0x00d44aa0 20765f63 6f6c6f72 3b200a20 20202076 v_color; . v │ │ │ │ - 0x00d44ab0 65633220 72616469 75733b20 0a202020 ec2 radius; . │ │ │ │ - 0x00d44ac0 20726164 6975732e 78203d20 6d617828 radius.x = max( │ │ │ │ - 0x00d44ad0 302e302c 20616273 28765f6f 66667365 0.0, abs(v_offse │ │ │ │ - 0x00d44ae0 74732e78 29202d20 765f6f66 66736574 ts.x) - v_offset │ │ │ │ - 0x00d44af0 732e7a29 3b200a20 20202072 61646975 s.z); . radiu │ │ │ │ - 0x00d44b00 732e7920 3d206d61 7828302e 302c2061 s.y = max(0.0, a │ │ │ │ - 0x00d44b10 62732876 5f6f6666 73657473 2e792920 bs(v_offsets.y) │ │ │ │ - 0x00d44b20 2d20765f 6f666673 6574732e 77293b20 - v_offsets.w); │ │ │ │ - 0x00d44b30 0a202020 20666c6f 6174206d 61785261 . float maxRa │ │ │ │ - 0x00d44b40 64697573 203d2031 2e303b20 0a202020 dius = 1.0; . │ │ │ │ - 0x00d44b50 20666c6f 61742061 61526164 69757320 float aaRadius │ │ │ │ - 0x00d44b60 3d20302e 393b200a 20202020 666c6f61 = 0.9; . floa │ │ │ │ - 0x00d44b70 74207374 65705661 6c756520 3d20736d t stepValue = sm │ │ │ │ - 0x00d44b80 6f6f7468 73746570 28616152 61646975 oothstep(aaRadiu │ │ │ │ - 0x00d44b90 73202a20 61615261 64697573 2c206d61 s * aaRadius, ma │ │ │ │ - 0x00d44ba0 78526164 69757320 2a206d61 78526164 xRadius * maxRad │ │ │ │ - 0x00d44bb0 6975732c 20646f74 28726164 6975732e ius, dot(radius. │ │ │ │ - 0x00d44bc0 78792c20 72616469 75732e78 7929293b xy, radius.xy)); │ │ │ │ - 0x00d44bd0 200a2020 20206669 6e616c43 6f6c6f72 . finalColor │ │ │ │ - 0x00d44be0 2e61203d 2066696e 616c436f 6c6f722e .a = finalColor. │ │ │ │ - 0x00d44bf0 61202a20 28312e30 202d2073 74657056 a * (1.0 - stepV │ │ │ │ - 0x00d44c00 616c7565 293b200a 20202020 765f4672 alue); . v_Fr │ │ │ │ - 0x00d44c10 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d44c20 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d44c30 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d44c40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d44c50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d44c60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d44c70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d44c80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d44c90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d44ca0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d44cb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d44cc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d44cd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d44ce0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d44cf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d44d00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d44d10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d44d20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d44d30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d44d40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d44d50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d44d60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d44d70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d44d80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d44d90 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d44da0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d44db0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d44dc0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d44dd0 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ - 0x00d44de0 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ - 0x00d44df0 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ - 0x00d44e00 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d44e10 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d44e20 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d44e30 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d44e40 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d44e50 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d44e60 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ - 0x00d44e70 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ - 0x00d44e80 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ - 0x00d44e90 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d44ea0 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ - 0x00d44eb0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d44ec0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d44ed0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00d44ee0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d44ef0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d44f00 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d44f10 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d44f20 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00d44f30 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d44f40 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00d44f50 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00d44f60 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00d44f70 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d44f80 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00d44f90 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d44fa0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d44fb0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d44fc0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00d44fd0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d44fe0 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00d44ff0 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00d45000 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d45010 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00d45020 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00d45030 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00d45040 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d45050 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00d45060 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00d45070 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00d45080 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00d45090 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d450a0 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00d450b0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00d450c0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00d450d0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d450e0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d450f0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d45100 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d45110 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00d45120 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00d45130 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00d45140 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00d45150 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d45160 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00d45170 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00d45180 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d45190 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00d451a0 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00d451b0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d451c0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00d451d0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00d451e0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d451f0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d45200 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00d45210 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00d45220 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00d45230 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00d45240 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00d45250 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00d45260 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d45270 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00d45280 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d45290 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00d452a0 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00d452b0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00d452c0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d452d0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00d452e0 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00d452f0 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00d45300 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00d45310 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00d45320 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00d45330 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00d45340 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00d45350 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00d45360 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00d45370 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00d45380 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d45390 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00d453a0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d453b0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00d453c0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00d453d0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d453e0 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00d453f0 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00d45400 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00d45410 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d45420 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d45430 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00d45440 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ - 0x00d45450 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ - 0x00d45460 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ - 0x00d45470 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00d45480 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ - 0x00d45490 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ - 0x00d454a0 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ - 0x00d454b0 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ - 0x00d454c0 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ - 0x00d454d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d454e0 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ - 0x00d454f0 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ - 0x00d45500 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ - 0x00d45510 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ - 0x00d45520 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ - 0x00d45530 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ - 0x00d45540 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ - 0x00d45550 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ - 0x00d45560 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ - 0x00d45570 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ - 0x00d45580 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d45590 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d455a0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d455b0 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ - 0x00d455c0 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ - 0x00d455d0 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ - 0x00d455e0 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ - 0x00d455f0 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ - 0x00d45600 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ - 0x00d45610 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ - 0x00d45620 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ - 0x00d45630 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ - 0x00d45640 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00d45650 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d45660 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d45670 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d45680 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d45690 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d456a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d456b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d456c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d456d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d456e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d456f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d45700 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d45710 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d45720 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d45730 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d45740 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d45750 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d45760 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d45770 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d45780 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d45790 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d457a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d457b0 63342076 5f746578 436f6f72 64733b20 c4 v_texCoords; │ │ │ │ - 0x00d457c0 0a202069 6e207665 63342076 5f6d6173 . in vec4 v_mas │ │ │ │ - 0x00d457d0 6b436f6c 6f723b20 0a20206f 75742076 kColor; . out v │ │ │ │ - 0x00d457e0 65633420 765f4672 6167436f 6c6f723b ec4 v_FragColor; │ │ │ │ - 0x00d457f0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d45800 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00d45810 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d45820 70726f6a 65637469 6f6e3b20 0a202075 projection; . u │ │ │ │ - 0x00d45830 6e69666f 726d206d 61743420 755f7069 niform mat4 u_pi │ │ │ │ - 0x00d45840 766f7454 72616e73 666f726d 3b200a20 votTransform; . │ │ │ │ - 0x00d45850 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00d45860 636f6e74 72617374 47616d6d 613b200a contrastGamma; . │ │ │ │ - 0x00d45870 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d45880 755f6f70 61636974 793b200a 2020756e u_opacity; . un │ │ │ │ - 0x00d45890 69666f72 6d20666c 6f617420 755f7a53 iform float u_zS │ │ │ │ - 0x00d458a0 63616c65 3b200a20 20756e69 666f726d cale; . uniform │ │ │ │ - 0x00d458b0 20666c6f 61742075 5f696e74 6572706f float u_interpo │ │ │ │ - 0x00d458c0 6c617469 6f6e3b20 0a202075 6e69666f lation; . unifo │ │ │ │ - 0x00d458d0 726d2066 6c6f6174 20755f69 734f7574 rm float u_isOut │ │ │ │ - 0x00d458e0 6c696e65 50617373 3b200a20 20756e69 linePass; . uni │ │ │ │ - 0x00d458f0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ - 0x00d45900 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ - 0x00d45910 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d45920 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d45930 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ - 0x00d45940 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00d45950 65633420 636f6c6f 72203d20 74657874 ec4 color = text │ │ │ │ - 0x00d45960 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00d45970 765f7465 78436f6f 7264732e 7879293b v_texCoords.xy); │ │ │ │ - 0x00d45980 200a2020 20207665 63342062 67436f6c . vec4 bgCol │ │ │ │ - 0x00d45990 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d459a0 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ - 0x00d459b0 6f726473 2e7a7729 202a2076 65633428 ords.zw) * vec4( │ │ │ │ - 0x00d459c0 765f6d61 736b436f 6c6f722e 78797a2c v_maskColor.xyz, │ │ │ │ - 0x00d459d0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00d459e0 2066696e 616c436f 6c6f7220 3d206d69 finalColor = mi │ │ │ │ - 0x00d459f0 7828636f 6c6f722c 206d6978 28626743 x(color, mix(bgC │ │ │ │ - 0x00d45a00 6f6c6f72 2c20636f 6c6f722c 20636f6c olor, color, col │ │ │ │ - 0x00d45a10 6f722e61 292c2062 67436f6c 6f722e61 or.a), bgColor.a │ │ │ │ - 0x00d45a20 293b200a 20202020 66696e61 6c436f6c ); . finalCol │ │ │ │ - 0x00d45a30 6f722e61 203d2063 6c616d70 28636f6c or.a = clamp(col │ │ │ │ - 0x00d45a40 6f722e61 202b2062 67436f6c 6f722e61 or.a + bgColor.a │ │ │ │ - 0x00d45a50 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00d45a60 6f706163 69747920 2a20765f 6d61736b opacity * v_mask │ │ │ │ - 0x00d45a70 436f6c6f 722e773b 200a2020 20206966 Color.w; . if │ │ │ │ - 0x00d45a80 20286669 6e616c43 6f6c6f72 2e61203c (finalColor.a < │ │ │ │ - 0x00d45a90 20302e30 3129200a 20202020 20206469 0.01) . di │ │ │ │ - 0x00d45aa0 73636172 643b200a 20202020 765f4672 scard; . v_Fr │ │ │ │ - 0x00d45ab0 6167436f 6c6f7220 3d206669 6e616c43 agColor = finalC │ │ │ │ - 0x00d45ac0 6f6c6f72 3b200a20 207d200a 00000000 olor; . } ..... │ │ │ │ - 0x00d45ad0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d45ae0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d45af0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d45b00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d45b10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d45b20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d45b30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d45b40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d45b50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d45b60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d45b70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d45b80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d45b90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d45ba0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d45bb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d45bc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d45bd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d45be0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d45bf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d45c00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d45c10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d45c20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d45c30 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d45c40 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d45c50 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00d45c60 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00d45c70 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00d45c80 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d45c90 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00d45ca0 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00d45cb0 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00d45cc0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d45cd0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d45ce0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d45cf0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d45d00 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d45d10 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d45d20 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d45d30 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d45d40 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d45d50 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d45d60 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d45d70 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d45d80 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d45d90 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d45da0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d45db0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d45dc0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d45dd0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d45de0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d45df0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d45e00 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d45e10 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d45e20 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d45e30 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d45e40 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d45e50 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d45e60 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d45e70 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d45e80 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d45e90 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d45ea0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d45eb0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d45ec0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d45ed0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d45ee0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d45ef0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d45f00 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d45f10 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d45f20 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d45f30 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d45f40 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d45f50 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d45f60 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d45f70 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d45f80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d45f90 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d45fa0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d45fb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d45fc0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d45fd0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d45fe0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d45ff0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d46000 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d46010 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d46020 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d46030 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d46040 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d46050 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d46060 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d46070 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d46080 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d46090 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d460a0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d460b0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d460c0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d460d0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d460e0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d460f0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d46100 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d46110 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d46120 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d46130 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d46140 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d46150 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d46160 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d46170 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d46180 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d46190 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d461a0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d461b0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d461c0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d461d0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d461e0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d461f0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d46200 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d46210 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d46220 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d46230 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d46240 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d46250 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d46260 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d46270 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d46280 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d46290 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d462a0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d462b0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d462c0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d462d0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d462e0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d462f0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d46300 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d46310 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d46320 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d46330 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d46340 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d46350 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d46360 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00d46370 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00d46380 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00d46390 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00d463a0 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00d463b0 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00d463c0 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00d463d0 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00d463e0 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ - 0x00d463f0 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ - 0x00d46400 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ - 0x00d46410 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ - 0x00d46420 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ - 0x00d46430 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ - 0x00d46440 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ - 0x00d46450 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00d46460 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d46470 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00d46480 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ - 0x00d46490 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d464a0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d464b0 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ - 0x00d464c0 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ - 0x00d464d0 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ - 0x00d464e0 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ - 0x00d464f0 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ - 0x00d46500 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ - 0x00d46510 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ - 0x00d46520 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ - 0x00d46530 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ - 0x00d46540 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ - 0x00d46550 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ - 0x00d46560 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ - 0x00d46570 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ - 0x00d46580 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ - 0x00d46590 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ - 0x00d465a0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d465b0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d465c0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d465d0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d465e0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d465f0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d46600 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d46610 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d46620 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d46630 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d46640 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d46650 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d46660 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d46670 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d46680 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d46690 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d466a0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d466b0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d466c0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d466d0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d466e0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d466f0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d46700 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d46710 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d46720 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d46730 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00d46740 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00d46750 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00d46760 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d46770 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00d46780 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00d46790 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00d467a0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d467b0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d467c0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d467d0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d467e0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d467f0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d46800 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d46810 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d46820 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d46830 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d46840 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d46850 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d46860 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d46870 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d46880 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d46890 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d468a0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d468b0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d468c0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d468d0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d468e0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d468f0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d46900 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d46910 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d46920 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d46930 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d46940 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d46950 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d46960 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d46970 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d46980 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d46990 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d469a0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d469b0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d469c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d469d0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d469e0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d469f0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d46a00 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d46a10 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d46a20 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d46a30 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d46a40 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d46a50 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d46a60 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d46a70 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d46a80 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d42650 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00d42660 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00d42670 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00d42680 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00d42690 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00d426a0 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00d426b0 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00d426c0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d426d0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d426e0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d426f0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d42700 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d42710 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d42720 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00d42730 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00d42740 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00d42750 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00d42760 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00d42770 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d42780 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00d42790 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00d427a0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00d427b0 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00d427c0 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00d427d0 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00d427e0 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00d427f0 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00d42800 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00d42810 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00d42820 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00d42830 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00d42840 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00d42850 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00d42860 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00d42870 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00d42880 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00d42890 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00d428a0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00d428b0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00d428c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d428d0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00d428e0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00d428f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d42900 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d42910 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00d42920 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d42930 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00d42940 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00d42950 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d42960 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d42970 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00d42980 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00d42990 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d429a0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00d429b0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00d429c0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00d429d0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d429e0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00d429f0 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00d42a00 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00d42a10 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00d42a20 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d42a30 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d42a40 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d42a50 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00d42a60 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00d42a70 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00d42a80 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00d42a90 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00d42aa0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d42ab0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d42ac0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00d42ad0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00d42ae0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00d42af0 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00d42b00 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d42b10 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00d42b20 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00d42b30 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00d42b40 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d42b50 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00d42b60 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00d42b70 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00d42b80 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00d42b90 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00d42ba0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00d42bb0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00d42bc0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00d42bd0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00d42be0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00d42bf0 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00d42c00 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d42c10 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d42c20 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00d42c30 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00d42c40 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00d42c50 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00d42c60 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00d42c70 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00d42c80 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00d42c90 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00d42ca0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00d42cb0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00d42cc0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00d42cd0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00d42ce0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00d42cf0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d42d00 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00d42d10 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00d42d20 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d42d30 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00d42d40 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00d42d50 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00d42d60 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d42d70 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00d42d80 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00d42d90 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00d42da0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00d42db0 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00d42dc0 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ + 0x00d42dd0 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ + 0x00d42de0 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ + 0x00d42df0 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ + 0x00d42e00 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00d42e10 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ + 0x00d42e20 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ + 0x00d42e30 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ + 0x00d42e40 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ + 0x00d42e50 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ + 0x00d42e60 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ + 0x00d42e70 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ + 0x00d42e80 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ + 0x00d42e90 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ + 0x00d42ea0 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ + 0x00d42eb0 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ + 0x00d42ec0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d42ed0 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00d42ee0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d42ef0 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00d42f00 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00d42f10 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00d42f20 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d42f30 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d42f40 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00d42f50 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d42f60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d42f70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d42f80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d42f90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d42fa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d42fb0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d42fc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d42fd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d42fe0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d42ff0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d43000 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d43010 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d43020 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d43030 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d43040 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d43050 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d43060 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d43070 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d43080 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d43090 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d430a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d430b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d430c0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d430d0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d430e0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d430f0 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00d43100 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00d43110 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00d43120 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00d43130 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d43140 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d43150 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d43160 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00d43170 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d43180 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d43190 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d431a0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d431b0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d431c0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d431d0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d431e0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d431f0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d43200 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d43210 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d43220 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d43230 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d43240 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d43250 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d43260 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d43270 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d43280 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d43290 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d432a0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d432b0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d432c0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d432d0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d432e0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d432f0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d43300 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d43310 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d43320 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d43330 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d43340 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d43350 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d43360 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d43370 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d43380 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d43390 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d433a0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d433b0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d433c0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d433d0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d433e0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d433f0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d43400 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d43410 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d43420 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d43430 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d43440 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d43450 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d43460 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d43470 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d43480 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d43490 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d434a0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d434b0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d434c0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d434d0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d434e0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d434f0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d43500 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d43510 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d43520 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d43530 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d43540 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d43550 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d43560 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d43570 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d43580 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d43590 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d435a0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d435b0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d435c0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d435d0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d435e0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d435f0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d43600 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d43610 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d43620 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d43630 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d43640 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d43650 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d43660 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d43670 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d43680 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d43690 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d436a0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d436b0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d436c0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d436d0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d436e0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d436f0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d43700 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d43710 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d43720 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d43730 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d43740 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d43750 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d43760 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d43770 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d43780 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d43790 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d437a0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d437b0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d437c0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d437d0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d437e0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d437f0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d43800 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d43810 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d43820 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d43830 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d43840 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00d43850 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00d43860 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00d43870 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00d43880 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00d43890 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ + 0x00d438a0 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d438b0 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ + 0x00d438c0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d438d0 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d438e0 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ + 0x00d438f0 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ + 0x00d43900 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ + 0x00d43910 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00d43920 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ + 0x00d43930 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ + 0x00d43940 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d43950 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ + 0x00d43960 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d43970 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00d43980 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ + 0x00d43990 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ + 0x00d439a0 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ + 0x00d439b0 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ + 0x00d439c0 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ + 0x00d439d0 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ + 0x00d439e0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d439f0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d43a00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d43a10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d43a20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d43a30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d43a40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d43a50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d43a60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d43a70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d43a80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d43a90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d43aa0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d43ab0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d43ac0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d43ad0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d43ae0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d43af0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d43b00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d43b10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d43b20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d43b30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d43b40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d43b50 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d43b60 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d43b70 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00d43b80 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ + 0x00d43b90 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d43ba0 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ + 0x00d43bb0 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00d43bc0 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00d43bd0 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00d43be0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00d43bf0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d43c00 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d43c10 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00d43c20 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00d43c30 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ + 0x00d43c40 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d43c50 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d43c60 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d43c70 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d43c80 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d43c90 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d43ca0 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d43cb0 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d43cc0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d43cd0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d43ce0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d43cf0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d43d00 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d43d10 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d43d20 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d43d30 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d43d40 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d43d50 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d43d60 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d43d70 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d43d80 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d43d90 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d43da0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d43db0 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d43dc0 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d43dd0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d43de0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d43df0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d43e00 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d43e10 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d43e20 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d43e30 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d43e40 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d43e50 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d43e60 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d43e70 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d43e80 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d43e90 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d43ea0 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d43eb0 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d43ec0 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d43ed0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d43ee0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d43ef0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d43f00 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d43f10 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d43f20 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d43f30 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d43f40 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d43f50 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d43f60 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d43f70 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d43f80 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d43f90 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d43fa0 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d43fb0 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d43fc0 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d43fd0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d43fe0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d43ff0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d44000 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d44010 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d44020 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d44030 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d44040 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d44050 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d44060 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d44070 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d44080 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d44090 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d440a0 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d440b0 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d440c0 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d440d0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d440e0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d440f0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d44100 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d44110 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d44120 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d44130 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d44140 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d44150 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d44160 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d44170 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d44180 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d44190 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d441a0 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d441b0 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d441c0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d441d0 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d441e0 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ + 0x00d441f0 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ + 0x00d44200 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ + 0x00d44210 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ + 0x00d44220 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ + 0x00d44230 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ + 0x00d44240 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ + 0x00d44250 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ + 0x00d44260 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ + 0x00d44270 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ + 0x00d44280 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ + 0x00d44290 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ + 0x00d442a0 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ + 0x00d442b0 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ + 0x00d442c0 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ + 0x00d442d0 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ + 0x00d442e0 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ + 0x00d442f0 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ + 0x00d44300 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ + 0x00d44310 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ + 0x00d44320 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00d44330 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00d44340 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d44350 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d44360 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d44370 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d44380 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d44390 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d443a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d443b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d443c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d443d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d443e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d443f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d44400 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d44410 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d44420 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d44430 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d44440 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d44450 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d44460 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d44470 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d44480 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d44490 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d444a0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d444b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d444c0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d444d0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d444e0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d444f0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d44500 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d44510 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d44520 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d44530 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d44540 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d44550 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d44560 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d44570 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d44580 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d44590 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d445a0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d445b0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d445c0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d445d0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d445e0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d445f0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d44600 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d44610 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d44620 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d44630 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d44640 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d44650 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d44660 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d44670 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d44680 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d44690 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d446a0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d446b0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d446c0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d446d0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d446e0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d446f0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d44700 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d44710 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d44720 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d44730 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d44740 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d44750 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d44760 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d44770 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d44780 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d44790 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d447a0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d447b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d447c0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d447d0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d447e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d447f0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d44800 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d44810 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d44820 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d44830 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d44840 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d44850 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d44860 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d44870 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d44880 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d44890 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d448a0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d448b0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d448c0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d448d0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d448e0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d448f0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d44900 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d44910 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d44920 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d44930 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d44940 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d44950 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d44960 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d44970 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d44980 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d44990 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d449a0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d449b0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d449c0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d449d0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d449e0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d449f0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d44a00 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d44a10 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d44a20 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d44a30 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d44a40 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d44a50 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d44a60 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d44a70 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d44a80 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d44a90 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d44aa0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d44ab0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d44ac0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d44ad0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d44ae0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d44af0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d44b00 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d44b10 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d44b20 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d44b30 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d44b40 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d44b50 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d44b60 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d44b70 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d44b80 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d44b90 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d44ba0 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00d44bb0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00d44bc0 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ + 0x00d44bd0 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ + 0x00d44be0 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ + 0x00d44bf0 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ + 0x00d44c00 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ + 0x00d44c10 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ + 0x00d44c20 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ + 0x00d44c30 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d44c40 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ + 0x00d44c50 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d44c60 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ + 0x00d44c70 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ + 0x00d44c80 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ + 0x00d44c90 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ + 0x00d44ca0 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ + 0x00d44cb0 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ + 0x00d44cc0 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ + 0x00d44cd0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00d44ce0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00d44cf0 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ + 0x00d44d00 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ + 0x00d44d10 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d44d20 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ + 0x00d44d30 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00d44d40 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ + 0x00d44d50 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00d44d60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d44d70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d44d80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d44d90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d44da0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d44db0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d44dc0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d44dd0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d44de0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d44df0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d44e00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d44e10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d44e20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d44e30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d44e40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d44e50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d44e60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d44e70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d44e80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d44e90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d44ea0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d44eb0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d44ec0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d44ed0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d44ee0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d44ef0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d44f00 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d44f10 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d44f20 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d44f30 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d44f40 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d44f50 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d44f60 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d44f70 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d44f80 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d44f90 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d44fa0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d44fb0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d44fc0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d44fd0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d44fe0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d44ff0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d45000 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d45010 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d45020 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d45030 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d45040 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d45050 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d45060 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d45070 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d45080 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d45090 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d450a0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d450b0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d450c0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d450d0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d450e0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d450f0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d45100 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d45110 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d45120 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d45130 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d45140 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d45150 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d45160 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d45170 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d45180 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d45190 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d451a0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d451b0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d451c0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d451d0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d451e0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d451f0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d45200 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d45210 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d45220 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d45230 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d45240 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d45250 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d45260 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d45270 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d45280 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d45290 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d452a0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d452b0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d452c0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d452d0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d452e0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d452f0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d45300 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d45310 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d45320 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d45330 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d45340 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d45350 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d45360 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d45370 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d45380 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d45390 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d453a0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d453b0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d453c0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d453d0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d453e0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d453f0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d45400 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d45410 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d45420 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d45430 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d45440 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d45450 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d45460 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d45470 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00d45480 20302c20 31293b20 0a202023 69666465 0, 1); . #ifde │ │ │ │ + 0x00d45490 66205655 4c4b414e 200a2020 2020676c f VULKAN . gl │ │ │ │ + 0x00d454a0 5f506f73 6974696f 6e2e7920 3d202d67 _Position.y = -g │ │ │ │ + 0x00d454b0 6c5f506f 73697469 6f6e2e79 3b200a20 l_Position.y; . │ │ │ │ + 0x00d454c0 20202067 6c5f506f 73697469 6f6e2e7a gl_Position.z │ │ │ │ + 0x00d454d0 203d2028 676c5f50 6f736974 696f6e2e = (gl_Position. │ │ │ │ + 0x00d454e0 7a20202b 20676c5f 506f7369 74696f6e z + gl_Position │ │ │ │ + 0x00d454f0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00d45500 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00d45510 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d45520 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d45530 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d45540 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d45550 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d45560 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d45570 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d45580 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d45590 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d455a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d455b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d455c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d455d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d455e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d455f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d45600 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d45610 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d45620 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d45630 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d45640 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d45650 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d45660 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d45670 63322076 5f746578 436f6f72 64733b20 c2 v_texCoords; │ │ │ │ + 0x00d45680 0a202069 6e207665 63342076 5f636f6c . in vec4 v_col │ │ │ │ + 0x00d45690 6f723b20 0a20206f 75742076 65633420 or; . out vec4 │ │ │ │ + 0x00d456a0 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00d456b0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00d456c0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00d456d0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d456e0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d456f0 20313030 302e303b 200a2020 766f6964 1000.0; . void │ │ │ │ + 0x00d45700 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d45710 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00d45720 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d45730 6f6c6f72 5465782c 20765f74 6578436f olorTex, v_texCo │ │ │ │ + 0x00d45740 6f726473 293b200a 20202020 765f4672 ords); . v_Fr │ │ │ │ + 0x00d45750 6167436f 6c6f7220 3d20636f 6c6f7220 agColor = color │ │ │ │ + 0x00d45760 2a20765f 636f6c6f 723b200a 20207d20 * v_color; . } │ │ │ │ + 0x00d45770 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d45780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d45790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d457a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d457b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d457c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d457d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d457e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d457f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d45800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d45810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d45820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d45830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d45840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d45850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d45860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d45870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d45880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d45890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d458a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d458b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d458c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d458d0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d458e0 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00d458f0 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ + 0x00d45900 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ + 0x00d45910 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ + 0x00d45920 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00d45930 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ + 0x00d45940 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ + 0x00d45950 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ + 0x00d45960 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d45970 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d45980 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00d45990 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d459a0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d459b0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d459c0 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00d459d0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d459e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d459f0 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00d45a00 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00d45a10 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00d45a20 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d45a30 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00d45a40 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d45a50 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d45a60 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d45a70 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00d45a80 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d45a90 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00d45aa0 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00d45ab0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d45ac0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d45ad0 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00d45ae0 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00d45af0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d45b00 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00d45b10 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00d45b20 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d45b30 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00d45b40 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00d45b50 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00d45b60 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00d45b70 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00d45b80 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d45b90 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d45ba0 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d45bb0 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00d45bc0 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00d45bd0 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00d45be0 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00d45bf0 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00d45c00 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d45c10 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00d45c20 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00d45c30 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d45c40 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00d45c50 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00d45c60 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d45c70 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00d45c80 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00d45c90 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00d45ca0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d45cb0 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00d45cc0 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00d45cd0 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00d45ce0 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00d45cf0 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00d45d00 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00d45d10 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00d45d20 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00d45d30 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00d45d40 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00d45d50 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00d45d60 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d45d70 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d45d80 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00d45d90 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00d45da0 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d45db0 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00d45dc0 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00d45dd0 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00d45de0 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00d45df0 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00d45e00 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00d45e10 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00d45e20 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00d45e30 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00d45e40 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00d45e50 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d45e60 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00d45e70 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00d45e80 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d45e90 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00d45ea0 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00d45eb0 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00d45ec0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d45ed0 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00d45ee0 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d45ef0 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ + 0x00d45f00 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ + 0x00d45f10 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ + 0x00d45f20 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d45f30 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d45f40 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00d45f50 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ + 0x00d45f60 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00d45f70 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00d45f80 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00d45f90 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00d45fa0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d45fb0 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00d45fc0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00d45fd0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00d45fe0 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ + 0x00d45ff0 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d46000 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d46010 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d46020 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d46030 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d46040 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d46050 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d46060 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d46070 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d46080 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d46090 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d460a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d460b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d460c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d460d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d460e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d460f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d46100 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d46110 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d46120 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d46130 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d46140 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d46150 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d46160 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d46170 20765f46 72616743 6f6c6f72 3b200a20 v_FragColor; . │ │ │ │ + 0x00d46180 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d46190 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00d461a0 666f726d 2073616d 706c6572 32442075 form sampler2D u │ │ │ │ + 0x00d461b0 5f636f6c 6f725465 783b200a 2020636f _colorTex; . co │ │ │ │ + 0x00d461c0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d461d0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d461e0 30302e30 3b200a20 20766f69 64206d61 00.0; . void ma │ │ │ │ + 0x00d461f0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d46200 65633420 66696e61 6c436f6c 6f72203d ec4 finalColor = │ │ │ │ + 0x00d46210 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d46220 5465782c 20765f63 6f6c6f72 54657843 Tex, v_colorTexC │ │ │ │ + 0x00d46230 6f6f7264 73293b20 0a202020 2066696e oords); . fin │ │ │ │ + 0x00d46240 616c436f 6c6f722e 61202a3d 20755f6f alColor.a *= u_o │ │ │ │ + 0x00d46250 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ + 0x00d46260 72616743 6f6c6f72 203d2066 696e616c ragColor = final │ │ │ │ + 0x00d46270 436f6c6f 723b200a 20207d20 0a000000 Color; . } .... │ │ │ │ + 0x00d46280 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d46290 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d462a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d462b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d462c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d462d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d462e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d462f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d46300 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d46310 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d46320 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d46330 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d46340 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d46350 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d46360 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d46370 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d46380 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d46390 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d463a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d463b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d463c0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00d463d0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00d463e0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00d463f0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00d46400 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00d46410 6f725465 78436f6f 72643b20 0a202075 orTexCoord; . u │ │ │ │ + 0x00d46420 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d46430 20755f63 6f6c6f72 5465783b 200a2020 u_colorTex; . │ │ │ │ + 0x00d46440 23656e64 6966200a 2020696e 20766563 #endif . in vec │ │ │ │ + 0x00d46450 3220765f 6d61736b 54657843 6f6f7264 2 v_maskTexCoord │ │ │ │ + 0x00d46460 3b200a20 206f7574 20766563 3420765f ; . out vec4 v_ │ │ │ │ + 0x00d46470 46726167 436f6c6f 723b200a 2020756e FragColor; . un │ │ │ │ + 0x00d46480 69666f72 6d206d61 74342075 5f6d6f64 iform mat4 u_mod │ │ │ │ + 0x00d46490 656c5669 65773b20 0a202075 6e69666f elView; . unifo │ │ │ │ + 0x00d464a0 726d206d 61743420 755f7072 6f6a6563 rm mat4 u_projec │ │ │ │ + 0x00d464b0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d464c0 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00d464d0 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00d464e0 6d207665 63322075 5f706f73 6974696f m vec2 u_positio │ │ │ │ + 0x00d464f0 6e3b200a 2020756e 69666f72 6d20666c n; . uniform fl │ │ │ │ + 0x00d46500 6f617420 755f6973 4f75746c 696e6550 oat u_isOutlineP │ │ │ │ + 0x00d46510 6173733b 200a2020 756e6966 6f726d20 ass; . uniform │ │ │ │ + 0x00d46520 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00d46530 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d46540 7420755f 6c656e67 74683b20 0a202075 t u_length; . u │ │ │ │ + 0x00d46550 6e69666f 726d2073 616d706c 65723244 niform sampler2D │ │ │ │ + 0x00d46560 20755f6d 61736b54 65783b20 0a202063 u_maskTex; . c │ │ │ │ + 0x00d46570 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d46580 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d46590 3030302e 303b200a 2020766f 6964206d 000.0; . void m │ │ │ │ + 0x00d465a0 61696e28 29200a20 207b200a 20202369 ain() . { . #i │ │ │ │ + 0x00d465b0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d465c0 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ + 0x00d465d0 676c7970 68436f6c 6f72203d 20765f63 glyphColor = v_c │ │ │ │ + 0x00d465e0 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00d465f0 20202020 4c4f575f 50207665 63342067 LOW_P vec4 g │ │ │ │ + 0x00d46600 6c797068 436f6c6f 72203d20 74657874 lyphColor = text │ │ │ │ + 0x00d46610 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d46620 765f636f 6c6f7254 6578436f 6f726429 v_colorTexCoord) │ │ │ │ + 0x00d46630 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d46640 20666c6f 61742064 69737420 3d207465 float dist = te │ │ │ │ + 0x00d46650 78747572 6528755f 6d61736b 5465782c xture(u_maskTex, │ │ │ │ + 0x00d46660 20765f6d 61736b54 6578436f 6f726429 v_maskTexCoord) │ │ │ │ + 0x00d46670 2e723b20 0a202020 20666c6f 61742061 .r; . float a │ │ │ │ + 0x00d46680 6c706861 203d2073 6d6f6f74 68737465 lpha = smoothste │ │ │ │ + 0x00d46690 7028755f 636f6e74 72617374 47616d6d p(u_contrastGamm │ │ │ │ + 0x00d466a0 612e7820 2d20755f 636f6e74 72617374 a.x - u_contrast │ │ │ │ + 0x00d466b0 47616d6d 612e792c 20755f63 6f6e7472 Gamma.y, u_contr │ │ │ │ + 0x00d466c0 61737447 616d6d61 2e78202b 20755f63 astGamma.x + u_c │ │ │ │ + 0x00d466d0 6f6e7472 61737447 616d6d61 2e792c20 ontrastGamma.y, │ │ │ │ + 0x00d466e0 64697374 29202a20 755f6f70 61636974 dist) * u_opacit │ │ │ │ + 0x00d466f0 793b200a 20202020 676c7970 68436f6c y; . glyphCol │ │ │ │ + 0x00d46700 6f722e61 202a3d20 616c7068 613b200a or.a *= alpha; . │ │ │ │ + 0x00d46710 20202020 765f4672 6167436f 6c6f7220 v_FragColor │ │ │ │ + 0x00d46720 3d20676c 79706843 6f6c6f72 3b200a20 = glyphColor; . │ │ │ │ + 0x00d46730 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d46740 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d46750 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d46760 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d46770 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d46780 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d46790 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d467a0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d467b0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d467c0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d467d0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d467e0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d467f0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d46800 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d46810 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d46820 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d46830 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d46840 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d46850 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d46860 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d46870 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d46880 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d46890 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00d468a0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00d468b0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00d468c0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d468d0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d468e0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d468f0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d46900 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d46910 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d46920 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d46930 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d46940 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00d46950 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d46960 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00d46970 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d46980 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00d46990 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00d469a0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00d469b0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d469c0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d469d0 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00d469e0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d469f0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d46a00 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d46a10 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d46a20 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d46a30 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d46a40 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d46a50 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d46a60 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d46a70 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d46a80 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ 0x00d46a90 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d46aa0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d46ab0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d46ac0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d46ad0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d46ae0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d46af0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d46b00 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d46b10 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d46b20 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d46b30 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d46b40 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d46b50 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d46b60 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d46b70 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d46b80 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d46b90 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d46ba0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d46bb0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d46bc0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d46bd0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d46be0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d46bf0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d46c00 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d46c10 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d46c20 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d46c30 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d46c40 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d46c50 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d46c60 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d46c70 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d46c80 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d46c90 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d46ca0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d46cb0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d46cc0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d46cd0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d46ce0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d46cf0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d46d00 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d46d10 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d46d20 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d46d30 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d46d40 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d46d50 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d46d60 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d46d70 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d46d80 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d46d90 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d46da0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d46db0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d46dc0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d46dd0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d46de0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d46df0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d46e00 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d46e10 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d46e20 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d46e30 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d46e40 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00d46e50 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00d46e60 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00d46e70 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00d46e80 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00d46e90 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00d46ea0 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00d46eb0 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00d46ec0 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ - 0x00d46ed0 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ - 0x00d46ee0 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00d46ef0 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ - 0x00d46f00 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ - 0x00d46f10 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d46f20 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ - 0x00d46f30 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ - 0x00d46f40 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ - 0x00d46f50 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ - 0x00d46f60 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ - 0x00d46f70 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d46f80 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ - 0x00d46f90 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ - 0x00d46fa0 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ - 0x00d46fb0 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ - 0x00d46fc0 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ - 0x00d46fd0 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ - 0x00d46fe0 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ - 0x00d46ff0 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ - 0x00d47000 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d47010 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ - 0x00d47020 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ - 0x00d47030 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ - 0x00d47040 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ - 0x00d47050 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ - 0x00d47060 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ - 0x00d47070 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ - 0x00d47080 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ - 0x00d47090 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ - 0x00d470a0 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ - 0x00d470b0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d46aa0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d46ab0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d46ac0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d46ad0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d46ae0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d46af0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d46b00 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d46b10 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d46b20 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d46b30 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d46b40 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d46b50 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d46b60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d46b70 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d46b80 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d46b90 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d46ba0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d46bb0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d46bc0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d46bd0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d46be0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d46bf0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d46c00 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d46c10 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d46c20 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d46c30 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d46c40 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d46c50 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d46c60 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d46c70 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d46c80 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d46c90 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d46ca0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d46cb0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d46cc0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d46cd0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d46ce0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d46cf0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d46d00 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d46d10 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d46d20 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d46d30 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d46d40 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d46d50 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d46d60 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d46d70 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d46d80 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d46d90 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d46da0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d46db0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d46dc0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d46dd0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d46de0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d46df0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d46e00 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d46e10 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d46e20 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d46e30 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d46e40 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d46e50 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d46e60 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d46e70 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d46e80 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d46e90 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d46ea0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d46eb0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d46ec0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d46ed0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d46ee0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d46ef0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d46f00 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d46f10 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d46f20 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d46f30 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d46f40 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d46f50 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d46f60 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d46f70 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d46f80 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d46f90 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00d46fa0 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d46fb0 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d46fc0 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ + 0x00d46fd0 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ + 0x00d46fe0 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ + 0x00d46ff0 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ + 0x00d47000 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ + 0x00d47010 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ + 0x00d47020 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00d47030 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d47040 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d47050 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ + 0x00d47060 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ + 0x00d47070 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00d47080 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ + 0x00d47090 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ + 0x00d470a0 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d470b0 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ 0x00d470c0 4e326470 31304770 7550726f 6772616d N2dp10GpuProgram │ │ │ │ 0x00d470d0 45000000 00000000 00000000 00000000 E............... │ │ │ │ 0x00d470e0 4e336770 75313950 726f6772 616d5061 N3gpu19ProgramPa │ │ │ │ 0x00d470f0 72616d73 53657474 65724500 00000000 ramsSetterE..... │ │ │ │ 0x00d47100 4e336770 75323147 4c50726f 6772616d N3gpu21GLProgram │ │ │ │ 0x00d47110 50617261 6d735365 74746572 45000000 ParamsSetterE... │ │ │ │ 0x00d47120 4e336770 75313150 726f6772 616d506f N3gpu11ProgramPo │ │ │ ├── readelf --wide --decompress --hex-dump=.gnu_debuglink {} │ │ │ │ @@ -1,7 +1,7 @@ │ │ │ │ │ │ │ │ Hex dump of section '.gnu_debuglink': │ │ │ │ - 0x00000000 31363133 34333038 63646262 62656661 16134308cdbbbefa │ │ │ │ - 0x00000010 31356265 37373537 36356236 65666432 15be775765b6efd2 │ │ │ │ - 0x00000020 64343038 35612e64 65627567 00000000 d4085a.debug.... │ │ │ │ - 0x00000030 dc12bba6 .... │ │ │ │ + 0x00000000 37643031 64666361 63626434 66336137 7d01dfcacbd4f3a7 │ │ │ │ + 0x00000010 31666238 66646535 38393331 33376530 1fb8fde5893137e0 │ │ │ │ + 0x00000020 61656331 63632e64 65627567 00000000 aec1cc.debug.... │ │ │ │ + 0x00000030 78c96d4e x.mN