Skip to content

Commit 5c07965

Browse files
authored
Merge pull request #1 from monfera/64-bit
High precision conversion
2 parents b905a2d + 31eef8e commit 5c07965

13 files changed

+299
-247
lines changed

lib/shaders.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ exports.mitreFragment = glslify('./shaders/mitre-fragment.glsl')
77
exports.pickVertex = glslify('./shaders/pick-vertex.glsl')
88
exports.pickFragment = glslify('./shaders/pick-fragment.glsl')
99
exports.fillVertex = glslify('./shaders/fill-vertex.glsl')
10-
exports.fillFragment = glslify('./shaders/fill-fragment.glsl')
10+
exports.fillFragment = glslify('./shaders/fill-fragment.glsl')

lib/shaders/baseProject.glsl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#pragma glslify: export(project)
2+
vec2 project(vec2 scHi, vec2 trHi, vec2 scLo, vec2 trLo, vec2 posHi, vec2 posLo) {
3+
return scHi * posHi + trHi
4+
+ scLo * posHi + trLo
5+
+ scHi * posLo
6+
+ scLo * posLo;
7+
}

lib/shaders/dirProject.glsl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#pragma glslify: export(project)
2+
vec2 project(vec2 scHi, vec2 scLo, vec2 posHi, vec2 posLo) {
3+
return scHi * posHi
4+
+ scLo * posHi
5+
+ scHi * posLo
6+
+ scLo * posLo;
7+
}

lib/shaders/fill-fragment.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ uniform vec4 color;
44

55
void main() {
66
gl_FragColor = vec4(color.rgb * color.a, color.a);
7-
}
7+
}

lib/shaders/fill-vertex.glsl

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
precision mediump float;
1+
precision highp float;
22

3-
attribute vec2 a, d;
3+
attribute vec2 aHi, aLo, dHi;
44

5-
uniform mat3 matrix;
6-
uniform vec2 projectAxis;
7-
uniform float projectValue;
8-
uniform float depth;
5+
uniform vec2 scaleHi, translateHi, scaleLo, translateLo, projectAxis;
6+
uniform float projectValue, depth;
7+
8+
#pragma glslify: baseProject = require("./baseProject.glsl")
99

1010
void main() {
11-
vec3 base = matrix * vec3(a, 1);
12-
vec2 p = base.xy / base.z;
13-
if(d.y < 0.0 || (d.y == 0.0 && d.x < 0.0)) {
11+
vec2 p = baseProject(scaleHi, translateHi, scaleLo, translateLo, aHi, aLo);
12+
if(dHi.y < 0.0 || (dHi.y == 0.0 && dHi.x < 0.0)) {
1413
if(dot(p, projectAxis) < projectValue) {
1514
p = p * (1.0 - abs(projectAxis)) + projectAxis * projectValue;
1615
}
1716
}
1817
gl_Position = vec4(p, depth, 1);
19-
}
18+
}

lib/shaders/line-fragment.glsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
precision mediump float;
1+
precision highp float;
22

33
uniform vec4 color;
44
uniform vec2 screenShape;
@@ -11,4 +11,4 @@ void main() {
1111
float t = fract(dot(direction, gl_FragCoord.xy) / dashLength);
1212
vec4 pcolor = color * texture2D(dashPattern, vec2(t, 0.0)).r;
1313
gl_FragColor = vec4(pcolor.rgb * pcolor.a, pcolor.a);
14-
}
14+
}

lib/shaders/line-vertex.glsl

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
precision mediump float;
1+
precision highp float;
22

3-
#pragma glslify: inverse = require("glsl-inverse")
3+
attribute vec2 aHi, aLo, dHi, dLo;
44

5-
attribute vec2 a, d;
6-
7-
uniform mat3 matrix;
8-
uniform vec2 screenShape;
5+
uniform vec2 scaleHi, translateHi, scaleLo, translateLo, screenShape;
96
uniform float width;
107

118
varying vec2 direction;
129

10+
#pragma glslify: baseProject = require("./baseProject.glsl")
11+
#pragma glslify: dirProject = require("./dirProject.glsl")
12+
1313
void main() {
14-
vec2 dir = (matrix * vec3(d, 0)).xy;
15-
vec3 base = matrix * vec3(a, 1);
16-
vec2 n = 0.5 * width *
17-
normalize(screenShape.yx * vec2(dir.y, -dir.x)) / screenShape.xy;
14+
vec2 p = baseProject(scaleHi, translateHi, scaleLo, translateLo, aHi, aLo);
15+
vec2 dir = dirProject(scaleHi, scaleLo, dHi, dLo);
16+
vec2 n = 0.5 * width * normalize(screenShape.yx * vec2(dir.y, -dir.x)) / screenShape.xy;
1817
vec2 tangent = normalize(screenShape.xy * dir);
1918
if(dir.x < 0.0 || (dir.x == 0.0 && dir.y < 0.0)) {
2019
direction = -tangent;
2120
} else {
2221
direction = tangent;
2322
}
24-
gl_Position = vec4(base.xy/base.z + n, 0, 1);
25-
}
23+
gl_Position = vec4(p + n, 0.0, 1.0);
24+
}

lib/shaders/mitre-fragment.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ void main() {
77
discard;
88
}
99
gl_FragColor = vec4(color.rgb, color.a);
10-
}
10+
}

lib/shaders/mitre-vertex.glsl

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
precision mediump float;
1+
precision highp float;
22

3-
attribute vec2 p;
3+
attribute vec2 aHi, aLo;
44

5-
uniform mat3 matrix;
6-
uniform vec2 screenShape;
5+
uniform vec2 scaleHi, translateHi, scaleLo, translateLo;
76
uniform float radius;
87

8+
#pragma glslify: baseProject = require("./baseProject.glsl")
9+
910
void main() {
10-
vec3 pp = matrix * vec3(p, 1);
11-
gl_Position = vec4(pp.xy, 0, pp.z);
11+
vec2 p = baseProject(scaleHi, translateHi, scaleLo, translateLo, aHi, aLo);
12+
gl_Position = vec4(p, 0.0, 1.0);
1213
gl_PointSize = radius;
13-
}
14+
}

lib/shaders/pick-fragment.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ void main() {
2222
fragId.z -= floor(fragId.z / 256.0) * 256.0;
2323

2424
gl_FragColor = fragId / 255.0;
25-
}
25+
}

0 commit comments

Comments
 (0)