Skip to content

Commit b251947

Browse files
authored
Merge pull request #6899 from plotly/prep-esbuild
Refactoring to inline WebGL `regl` shader code in preparation of using `esbuild`
2 parents 3c92271 + a809b80 commit b251947

File tree

5 files changed

+144
-145
lines changed

5 files changed

+144
-145
lines changed

package-lock.json

+7-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@
9696
"fast-isnumeric": "^1.1.4",
9797
"gl-mat4": "^1.2.0",
9898
"gl-text": "^1.3.1",
99-
"glslify": "^7.1.1",
10099
"has-hover": "^1.0.1",
101100
"has-passive-events": "^1.0.0",
102101
"is-mobile": "^4.0.0",
@@ -110,7 +109,7 @@
110109
"probe-image-size": "^7.2.3",
111110
"regl": "npm:@plotly/regl@^2.1.2",
112111
"regl-error2d": "^2.0.12",
113-
"regl-line2d": "^3.1.2",
112+
"regl-line2d": "^3.1.3",
114113
"regl-scatter2d": "^3.3.1",
115114
"regl-splom": "^1.0.14",
116115
"strongly-connected-components": "^1.0.1",

src/traces/parcoords/lines.js

+136-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,141 @@
11
'use strict';
22

3-
var glslify = require('glslify');
4-
var vertexShaderSource = glslify('./shaders/vertex.glsl');
5-
var fragmentShaderSource = glslify('./shaders/fragment.glsl');
3+
var vertexShaderSource = [
4+
'precision highp float;',
5+
'',
6+
'varying vec4 fragColor;',
7+
'',
8+
'attribute vec4 p01_04, p05_08, p09_12, p13_16,',
9+
' p17_20, p21_24, p25_28, p29_32,',
10+
' p33_36, p37_40, p41_44, p45_48,',
11+
' p49_52, p53_56, p57_60, colors;',
12+
'',
13+
'uniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,',
14+
' loA, hiA, loB, hiB, loC, hiC, loD, hiD;',
15+
'',
16+
'uniform vec2 resolution, viewBoxPos, viewBoxSize;',
17+
'uniform float maskHeight;',
18+
'uniform float drwLayer; // 0: context, 1: focus, 2: pick',
19+
'uniform vec4 contextColor;',
20+
'uniform sampler2D maskTexture, palette;',
21+
'',
22+
'bool isPick = (drwLayer > 1.5);',
23+
'bool isContext = (drwLayer < 0.5);',
24+
'',
25+
'const vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);',
26+
'const vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);',
27+
'',
28+
'float val(mat4 p, mat4 v) {',
29+
' return dot(matrixCompMult(p, v) * UNITS, UNITS);',
30+
'}',
31+
'',
32+
'float axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {',
33+
' float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);',
34+
' float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);',
35+
' return y1 * (1.0 - ratio) + y2 * ratio;',
36+
'}',
37+
'',
38+
'int iMod(int a, int b) {',
39+
' return a - b * (a / b);',
40+
'}',
41+
'',
42+
'bool fOutside(float p, float lo, float hi) {',
43+
' return (lo < hi) && (lo > p || p > hi);',
44+
'}',
45+
'',
46+
'bool vOutside(vec4 p, vec4 lo, vec4 hi) {',
47+
' return (',
48+
' fOutside(p[0], lo[0], hi[0]) ||',
49+
' fOutside(p[1], lo[1], hi[1]) ||',
50+
' fOutside(p[2], lo[2], hi[2]) ||',
51+
' fOutside(p[3], lo[3], hi[3])',
52+
' );',
53+
'}',
54+
'',
55+
'bool mOutside(mat4 p, mat4 lo, mat4 hi) {',
56+
' return (',
57+
' vOutside(p[0], lo[0], hi[0]) ||',
58+
' vOutside(p[1], lo[1], hi[1]) ||',
59+
' vOutside(p[2], lo[2], hi[2]) ||',
60+
' vOutside(p[3], lo[3], hi[3])',
61+
' );',
62+
'}',
63+
'',
64+
'bool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {',
65+
' return mOutside(A, loA, hiA) ||',
66+
' mOutside(B, loB, hiB) ||',
67+
' mOutside(C, loC, hiC) ||',
68+
' mOutside(D, loD, hiD);',
69+
'}',
70+
'',
71+
'bool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {',
72+
' mat4 pnts[4];',
73+
' pnts[0] = A;',
74+
' pnts[1] = B;',
75+
' pnts[2] = C;',
76+
' pnts[3] = D;',
77+
'',
78+
' for(int i = 0; i < 4; ++i) {',
79+
' for(int j = 0; j < 4; ++j) {',
80+
' for(int k = 0; k < 4; ++k) {',
81+
' if(0 == iMod(',
82+
' int(255.0 * texture2D(maskTexture,',
83+
' vec2(',
84+
' (float(i * 2 + j / 2) + 0.5) / 8.0,',
85+
' (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight',
86+
' ))[3]',
87+
' ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),',
88+
' 2',
89+
' )) return true;',
90+
' }',
91+
' }',
92+
' }',
93+
' return false;',
94+
'}',
95+
'',
96+
'vec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {',
97+
' float x = 0.5 * sign(v) + 0.5;',
98+
' float y = axisY(x, A, B, C, D);',
99+
' float z = 1.0 - abs(v);',
100+
'',
101+
' z += isContext ? 0.0 : 2.0 * float(',
102+
' outsideBoundingBox(A, B, C, D) ||',
103+
' outsideRasterMask(A, B, C, D)',
104+
' );',
105+
'',
106+
' return vec4(',
107+
' 2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,',
108+
' z,',
109+
' 1.0',
110+
' );',
111+
'}',
112+
'',
113+
'void main() {',
114+
' mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);',
115+
' mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);',
116+
' mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);',
117+
' mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);',
118+
'',
119+
' float v = colors[3];',
120+
'',
121+
' gl_Position = position(isContext, v, A, B, C, D);',
122+
'',
123+
' fragColor =',
124+
' isContext ? vec4(contextColor) :',
125+
' isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));',
126+
'}'
127+
].join('\n');
128+
129+
var fragmentShaderSource = [
130+
'precision highp float;',
131+
'',
132+
'varying vec4 fragColor;',
133+
'',
134+
'void main() {',
135+
' gl_FragColor = fragColor;',
136+
'}'
137+
].join('\n');
138+
6139
var maxDim = require('./constants').maxDimensionCount;
7140

8141
var Lib = require('../../lib');

src/traces/parcoords/shaders/fragment.glsl

-7
This file was deleted.

src/traces/parcoords/shaders/vertex.glsl

-123
This file was deleted.

0 commit comments

Comments
 (0)