@luma.gl/shadertools 8.5.6 → 8.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.js +80 -79
- package/dist/dist.min.js +1 -1
- package/dist/es5/lib/platform-defines.js +1 -1
- package/dist/es5/lib/platform-defines.js.map +1 -1
- package/dist/es5/utils/webgl-info.js +1 -5
- package/dist/es5/utils/webgl-info.js.map +1 -1
- package/dist/esm/lib/assemble-shaders.js +30 -13
- package/dist/esm/lib/assemble-shaders.js.map +1 -1
- package/dist/esm/lib/inject-shader.js +2 -2
- package/dist/esm/lib/inject-shader.js.map +1 -1
- package/dist/esm/lib/platform-defines.js +80 -9
- package/dist/esm/lib/platform-defines.js.map +1 -1
- package/dist/esm/lib/resolve-modules.js +1 -1
- package/dist/esm/lib/resolve-modules.js.map +1 -1
- package/dist/esm/lib/shader-module.js +9 -4
- package/dist/esm/lib/shader-module.js.map +1 -1
- package/dist/esm/lib/transpile-shader.js +5 -5
- package/dist/esm/lib/transpile-shader.js.map +1 -1
- package/dist/esm/modules/dirlight/dirlight.js +8 -1
- package/dist/esm/modules/dirlight/dirlight.js.map +1 -1
- package/dist/esm/modules/fp32/fp32.js +148 -1
- package/dist/esm/modules/fp32/fp32.js.map +1 -1
- package/dist/esm/modules/fp64/fp64-arithmetic.glsl.js +143 -1
- package/dist/esm/modules/fp64/fp64-arithmetic.glsl.js.map +1 -1
- package/dist/esm/modules/fp64/fp64-functions.glsl.js +630 -1
- package/dist/esm/modules/fp64/fp64-functions.glsl.js.map +1 -1
- package/dist/esm/modules/fxaa/fxaa.js +535 -1
- package/dist/esm/modules/fxaa/fxaa.js.map +1 -1
- package/dist/esm/modules/geometry/geometry.js +28 -2
- package/dist/esm/modules/geometry/geometry.js.map +1 -1
- package/dist/esm/modules/image-adjust-filters/brightnesscontrast.js +18 -1
- package/dist/esm/modules/image-adjust-filters/brightnesscontrast.js.map +1 -1
- package/dist/esm/modules/image-adjust-filters/denoise.js +22 -1
- package/dist/esm/modules/image-adjust-filters/denoise.js.map +1 -1
- package/dist/esm/modules/image-adjust-filters/huesaturation.js +28 -1
- package/dist/esm/modules/image-adjust-filters/huesaturation.js.map +1 -1
- package/dist/esm/modules/image-adjust-filters/noise.js +19 -1
- package/dist/esm/modules/image-adjust-filters/noise.js.map +1 -1
- package/dist/esm/modules/image-adjust-filters/sepia.js +20 -1
- package/dist/esm/modules/image-adjust-filters/sepia.js.map +1 -1
- package/dist/esm/modules/image-adjust-filters/vibrance.js +15 -1
- package/dist/esm/modules/image-adjust-filters/vibrance.js.map +1 -1
- package/dist/esm/modules/image-adjust-filters/vignette.js +14 -1
- package/dist/esm/modules/image-adjust-filters/vignette.js.map +1 -1
- package/dist/esm/modules/image-blur-filters/tiltshift.js +37 -1
- package/dist/esm/modules/image-blur-filters/tiltshift.js.map +1 -1
- package/dist/esm/modules/image-blur-filters/triangleblur.js +27 -1
- package/dist/esm/modules/image-blur-filters/triangleblur.js.map +1 -1
- package/dist/esm/modules/image-blur-filters/zoomblur.js +26 -1
- package/dist/esm/modules/image-blur-filters/zoomblur.js.map +1 -1
- package/dist/esm/modules/image-fun-filters/colorhalftone.js +34 -1
- package/dist/esm/modules/image-fun-filters/colorhalftone.js.map +1 -1
- package/dist/esm/modules/image-fun-filters/dotscreen.js +22 -1
- package/dist/esm/modules/image-fun-filters/dotscreen.js.map +1 -1
- package/dist/esm/modules/image-fun-filters/edgework.js +50 -1
- package/dist/esm/modules/image-fun-filters/edgework.js.map +1 -1
- package/dist/esm/modules/image-fun-filters/hexagonalpixelate.js +42 -1
- package/dist/esm/modules/image-fun-filters/hexagonalpixelate.js.map +1 -1
- package/dist/esm/modules/image-fun-filters/ink.js +27 -1
- package/dist/esm/modules/image-fun-filters/ink.js.map +1 -1
- package/dist/esm/modules/image-fun-filters/magnify.js +20 -1
- package/dist/esm/modules/image-fun-filters/magnify.js.map +1 -1
- package/dist/esm/modules/image-warp-filters/bulgepinch.js +27 -1
- package/dist/esm/modules/image-warp-filters/bulgepinch.js.map +1 -1
- package/dist/esm/modules/image-warp-filters/swirl.js +29 -1
- package/dist/esm/modules/image-warp-filters/swirl.js.map +1 -1
- package/dist/esm/modules/image-warp-filters/warp.js +11 -1
- package/dist/esm/modules/image-warp-filters/warp.js.map +1 -1
- package/dist/esm/modules/lights/lights.glsl.js +34 -1
- package/dist/esm/modules/lights/lights.glsl.js.map +1 -1
- package/dist/esm/modules/lights/lights.js +5 -5
- package/dist/esm/modules/lights/lights.js.map +1 -1
- package/dist/esm/modules/module-injectors.js +27 -2
- package/dist/esm/modules/module-injectors.js.map +1 -1
- package/dist/esm/modules/pbr/pbr-fragment.glsl.js +351 -1
- package/dist/esm/modules/pbr/pbr-fragment.glsl.js.map +1 -1
- package/dist/esm/modules/pbr/pbr-vertex.glsl.js +39 -1
- package/dist/esm/modules/pbr/pbr-vertex.glsl.js.map +1 -1
- package/dist/esm/modules/phong-lighting/phong-lighting.glsl.js +75 -1
- package/dist/esm/modules/phong-lighting/phong-lighting.glsl.js.map +1 -1
- package/dist/esm/modules/picking/picking.js +86 -2
- package/dist/esm/modules/picking/picking.js.map +1 -1
- package/dist/esm/modules/project/project.js +68 -3
- package/dist/esm/modules/project/project.js.map +1 -1
- package/dist/esm/modules/transform/transform.js +28 -1
- package/dist/esm/modules/transform/transform.js.map +1 -1
- package/dist/esm/modules/utils/random.js +5 -1
- package/dist/esm/modules/utils/random.js.map +1 -1
- package/dist/esm/utils/shader-utils.js +23 -9
- package/dist/esm/utils/shader-utils.js.map +1 -1
- package/dist/esm/utils/webgl-info.js +2 -6
- package/dist/esm/utils/webgl-info.js.map +1 -1
- package/package.json +2 -2
- package/src/lib/platform-defines.js +4 -0
- package/src/utils/webgl-info.js +1 -4
- package/src/.DS_Store +0 -0
|
@@ -37,8 +37,92 @@ function getUniforms(opts = DEFAULT_MODULE_OPTIONS) {
|
|
|
37
37
|
return uniforms;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
const vs =
|
|
41
|
-
|
|
40
|
+
const vs = `\
|
|
41
|
+
uniform bool picking_uActive;
|
|
42
|
+
uniform bool picking_uAttribute;
|
|
43
|
+
uniform vec3 picking_uSelectedColor;
|
|
44
|
+
uniform bool picking_uSelectedColorValid;
|
|
45
|
+
|
|
46
|
+
out vec4 picking_vRGBcolor_Avalid;
|
|
47
|
+
|
|
48
|
+
const float COLOR_SCALE = 1. / 255.;
|
|
49
|
+
|
|
50
|
+
bool picking_isColorValid(vec3 color) {
|
|
51
|
+
return dot(color, vec3(1.0)) > 0.001;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
bool isVertexPicked(vec3 vertexColor) {
|
|
55
|
+
return
|
|
56
|
+
picking_uSelectedColorValid &&
|
|
57
|
+
!picking_isColorValid(abs(vertexColor - picking_uSelectedColor));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
void picking_setPickingColor(vec3 pickingColor) {
|
|
61
|
+
if (picking_uActive) {
|
|
62
|
+
picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));
|
|
63
|
+
|
|
64
|
+
if (!picking_uAttribute) {
|
|
65
|
+
picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void picking_setPickingAttribute(float value) {
|
|
73
|
+
if (picking_uAttribute) {
|
|
74
|
+
picking_vRGBcolor_Avalid.r = value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
void picking_setPickingAttribute(vec2 value) {
|
|
78
|
+
if (picking_uAttribute) {
|
|
79
|
+
picking_vRGBcolor_Avalid.rg = value;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
void picking_setPickingAttribute(vec3 value) {
|
|
83
|
+
if (picking_uAttribute) {
|
|
84
|
+
picking_vRGBcolor_Avalid.rgb = value;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
const fs = `\
|
|
89
|
+
uniform bool picking_uActive;
|
|
90
|
+
uniform vec3 picking_uSelectedColor;
|
|
91
|
+
uniform vec4 picking_uHighlightColor;
|
|
92
|
+
|
|
93
|
+
in vec4 picking_vRGBcolor_Avalid;
|
|
94
|
+
vec4 picking_filterHighlightColor(vec4 color) {
|
|
95
|
+
if (picking_uActive) {
|
|
96
|
+
return color;
|
|
97
|
+
}
|
|
98
|
+
bool selected = bool(picking_vRGBcolor_Avalid.a);
|
|
99
|
+
|
|
100
|
+
if (selected) {
|
|
101
|
+
float highLightAlpha = picking_uHighlightColor.a;
|
|
102
|
+
float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);
|
|
103
|
+
float highLightRatio = highLightAlpha / blendedAlpha;
|
|
104
|
+
|
|
105
|
+
vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.rgb, highLightRatio);
|
|
106
|
+
return vec4(blendedRGB, blendedAlpha);
|
|
107
|
+
} else {
|
|
108
|
+
return color;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
vec4 picking_filterPickingColor(vec4 color) {
|
|
112
|
+
if (picking_uActive) {
|
|
113
|
+
if (picking_vRGBcolor_Avalid.a == 0.0) {
|
|
114
|
+
discard;
|
|
115
|
+
}
|
|
116
|
+
return picking_vRGBcolor_Avalid;
|
|
117
|
+
}
|
|
118
|
+
return color;
|
|
119
|
+
}
|
|
120
|
+
vec4 picking_filterColor(vec4 color) {
|
|
121
|
+
vec4 highightColor = picking_filterHighlightColor(color);
|
|
122
|
+
return picking_filterPickingColor(highightColor);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
`;
|
|
42
126
|
export const picking = {
|
|
43
127
|
name: 'picking',
|
|
44
128
|
vs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/picking/picking.js"],"names":["DEFAULT_HIGHLIGHT_COLOR","Uint8Array","DEFAULT_MODULE_OPTIONS","pickingSelectedColor","pickingHighlightColor","pickingActive","pickingAttribute","getUniforms","opts","uniforms","undefined","picking_uSelectedColorValid","selectedColor","slice","picking_uSelectedColor","color","Array","from","x","Number","isFinite","picking_uHighlightColor","picking_uActive","Boolean","picking_uAttribute","vs","fs","picking","name"],"mappings":"AAEA,MAAMA,uBAAuB,GAAG,IAAIC,UAAJ,CAAe,CAAC,CAAD,EAAI,GAAJ,EAAS,GAAT,EAAc,GAAd,CAAf,CAAhC;AAEA,MAAMC,sBAAsB,GAAG;AAC7BC,EAAAA,oBAAoB,EAAE,IADO;AAE7BC,EAAAA,qBAAqB,EAAEJ,uBAFM;AAG7BK,EAAAA,aAAa,EAAE,KAHc;AAI7BC,EAAAA,gBAAgB,EAAE;AAJW,CAA/B;;AAQA,SAASC,WAAT,CAAqBC,IAAI,GAAGN,sBAA5B,EAAoD;AAClD,QAAMO,QAAQ,GAAG,EAAjB;;AACA,MAAID,IAAI,CAACL,oBAAL,KAA8BO,SAAlC,EAA6C;AAC3C,QAAI,CAACF,IAAI,CAACL,oBAAV,EAAgC;AAC9BM,MAAAA,QAAQ,CAACE,2BAAT,GAAuC,CAAvC;AACD,KAFD,MAEO;AACL,YAAMC,aAAa,GAAGJ,IAAI,CAACL,oBAAL,CAA0BU,KAA1B,CAAgC,CAAhC,EAAmC,CAAnC,CAAtB;AACAJ,MAAAA,QAAQ,CAACE,2BAAT,GAAuC,CAAvC;AACAF,MAAAA,QAAQ,CAACK,sBAAT,GAAkCF,aAAlC;AACD;AACF;;AACD,MAAIJ,IAAI,CAACJ,qBAAT,EAAgC;AAC9B,UAAMW,KAAK,GAAGC,KAAK,CAACC,IAAN,CAAWT,IAAI,CAACJ,qBAAhB,EAAuCc,CAAC,IAAIA,CAAC,GAAG,GAAhD,CAAd;;AACA,QAAI,CAACC,MAAM,CAACC,QAAP,CAAgBL,KAAK,CAAC,CAAD,CAArB,CAAL,EAAgC;AAC9BA,MAAAA,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX;AACD;;AACDN,IAAAA,QAAQ,CAACY,uBAAT,GAAmCN,KAAnC;AACD;;AACD,MAAIP,IAAI,CAACH,aAAL,KAAuBK,SAA3B,EAAsC;AACpCD,IAAAA,QAAQ,CAACa,eAAT,GAA2BC,OAAO,CAACf,IAAI,CAACH,aAAN,CAAlC;AACAI,IAAAA,QAAQ,CAACe,kBAAT,GAA8BD,OAAO,CAACf,IAAI,CAACF,gBAAN,CAArC;AACD;;AACD,SAAOG,QAAP;AACD;;AAED,MAAMgB,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/picking/picking.js"],"names":["DEFAULT_HIGHLIGHT_COLOR","Uint8Array","DEFAULT_MODULE_OPTIONS","pickingSelectedColor","pickingHighlightColor","pickingActive","pickingAttribute","getUniforms","opts","uniforms","undefined","picking_uSelectedColorValid","selectedColor","slice","picking_uSelectedColor","color","Array","from","x","Number","isFinite","picking_uHighlightColor","picking_uActive","Boolean","picking_uAttribute","vs","fs","picking","name"],"mappings":"AAEA,MAAMA,uBAAuB,GAAG,IAAIC,UAAJ,CAAe,CAAC,CAAD,EAAI,GAAJ,EAAS,GAAT,EAAc,GAAd,CAAf,CAAhC;AAEA,MAAMC,sBAAsB,GAAG;AAC7BC,EAAAA,oBAAoB,EAAE,IADO;AAE7BC,EAAAA,qBAAqB,EAAEJ,uBAFM;AAG7BK,EAAAA,aAAa,EAAE,KAHc;AAI7BC,EAAAA,gBAAgB,EAAE;AAJW,CAA/B;;AAQA,SAASC,WAAT,CAAqBC,IAAI,GAAGN,sBAA5B,EAAoD;AAClD,QAAMO,QAAQ,GAAG,EAAjB;;AACA,MAAID,IAAI,CAACL,oBAAL,KAA8BO,SAAlC,EAA6C;AAC3C,QAAI,CAACF,IAAI,CAACL,oBAAV,EAAgC;AAC9BM,MAAAA,QAAQ,CAACE,2BAAT,GAAuC,CAAvC;AACD,KAFD,MAEO;AACL,YAAMC,aAAa,GAAGJ,IAAI,CAACL,oBAAL,CAA0BU,KAA1B,CAAgC,CAAhC,EAAmC,CAAnC,CAAtB;AACAJ,MAAAA,QAAQ,CAACE,2BAAT,GAAuC,CAAvC;AACAF,MAAAA,QAAQ,CAACK,sBAAT,GAAkCF,aAAlC;AACD;AACF;;AACD,MAAIJ,IAAI,CAACJ,qBAAT,EAAgC;AAC9B,UAAMW,KAAK,GAAGC,KAAK,CAACC,IAAN,CAAWT,IAAI,CAACJ,qBAAhB,EAAuCc,CAAC,IAAIA,CAAC,GAAG,GAAhD,CAAd;;AACA,QAAI,CAACC,MAAM,CAACC,QAAP,CAAgBL,KAAK,CAAC,CAAD,CAArB,CAAL,EAAgC;AAC9BA,MAAAA,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX;AACD;;AACDN,IAAAA,QAAQ,CAACY,uBAAT,GAAmCN,KAAnC;AACD;;AACD,MAAIP,IAAI,CAACH,aAAL,KAAuBK,SAA3B,EAAsC;AACpCD,IAAAA,QAAQ,CAACa,eAAT,GAA2BC,OAAO,CAACf,IAAI,CAACH,aAAN,CAAlC;AACAI,IAAAA,QAAQ,CAACe,kBAAT,GAA8BD,OAAO,CAACf,IAAI,CAACF,gBAAN,CAArC;AACD;;AACD,SAAOG,QAAP;AACD;;AAED,MAAMgB,EAAE,GAAI;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA/CA;AAoDA,MAAMC,EAAE,GAAI;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CArCA;AAqDA,OAAO,MAAMC,OAAO,GAAG;AACrBC,EAAAA,IAAI,EAAE,SADe;AAErBH,EAAAA,EAFqB;AAGrBC,EAAAA,EAHqB;AAIrBnB,EAAAA;AAJqB,CAAhB","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nconst DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);\n\nconst DEFAULT_MODULE_OPTIONS = {\n pickingSelectedColor: null, // Set to a picking color to visually highlight that item\n pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR, // Color of visual highlight of \"selected\" item\n pickingActive: false, // Set to true when rendering to off-screen \"picking\" buffer\n pickingAttribute: false // Set to true when picking an attribute value instead of object index\n};\n\n/* eslint-disable camelcase */\nfunction getUniforms(opts = DEFAULT_MODULE_OPTIONS) {\n const uniforms = {};\n if (opts.pickingSelectedColor !== undefined) {\n if (!opts.pickingSelectedColor) {\n uniforms.picking_uSelectedColorValid = 0;\n } else {\n const selectedColor = opts.pickingSelectedColor.slice(0, 3);\n uniforms.picking_uSelectedColorValid = 1;\n uniforms.picking_uSelectedColor = selectedColor;\n }\n }\n if (opts.pickingHighlightColor) {\n const color = Array.from(opts.pickingHighlightColor, x => x / 255);\n if (!Number.isFinite(color[3])) {\n color[3] = 1;\n }\n uniforms.picking_uHighlightColor = color;\n }\n if (opts.pickingActive !== undefined) {\n uniforms.picking_uActive = Boolean(opts.pickingActive);\n uniforms.picking_uAttribute = Boolean(opts.pickingAttribute);\n }\n return uniforms;\n}\n\nconst vs = `\\\nuniform bool picking_uActive;\nuniform bool picking_uAttribute;\nuniform vec3 picking_uSelectedColor;\nuniform bool picking_uSelectedColorValid;\n\nout vec4 picking_vRGBcolor_Avalid;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\n // Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!picking_uAttribute) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;\n }\n } else {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n`;\n\nconst fs = `\\\nuniform bool picking_uActive;\nuniform vec3 picking_uSelectedColor;\nuniform vec4 picking_uHighlightColor;\n\nin vec4 picking_vRGBcolor_Avalid;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n if (picking_uActive) {\n return color;\n }\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n float highLightAlpha = picking_uHighlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n if (picking_uActive) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 highightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highightColor);\n}\n\n`;\n\n/** @type {ShaderModule} */\nexport const picking = {\n name: 'picking',\n vs,\n fs,\n getUniforms\n};\n"],"file":"picking.js"}
|
|
@@ -33,9 +33,74 @@ function getUniforms(opts = DEFAULT_MODULE_OPTIONS, prevUniforms = {}) {
|
|
|
33
33
|
return uniforms;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
const common =
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
const common = `\
|
|
37
|
+
varying vec4 project_vPositionWorld;
|
|
38
|
+
varying vec3 project_vNormalWorld;
|
|
39
|
+
|
|
40
|
+
vec4 project_getPosition_World() {
|
|
41
|
+
return project_vPositionWorld;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
vec3 project_getNormal_World() {
|
|
45
|
+
return project_vNormalWorld;
|
|
46
|
+
}
|
|
47
|
+
`;
|
|
48
|
+
const vs = `\
|
|
49
|
+
${common}
|
|
50
|
+
uniform mat4 modelMatrix;
|
|
51
|
+
uniform mat4 viewMatrix;
|
|
52
|
+
uniform mat4 projectionMatrix;
|
|
53
|
+
uniform mat4 viewProjectionMatrix;
|
|
54
|
+
uniform vec3 cameraPositionWorld;
|
|
55
|
+
|
|
56
|
+
struct World {
|
|
57
|
+
vec3 position;
|
|
58
|
+
vec3 normal;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
World world;
|
|
62
|
+
|
|
63
|
+
void project_setPosition(vec4 position) {
|
|
64
|
+
project_vPositionWorld = position;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void project_setNormal(vec3 normal) {
|
|
68
|
+
project_vNormalWorld = normal;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
void project_setPositionAndNormal_World(vec3 position, vec3 normal) {
|
|
72
|
+
world.position = position;
|
|
73
|
+
world.normal = normal;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void project_setPositionAndNormal_Model(vec3 position, vec3 normal) {
|
|
77
|
+
world.position = (modelMatrix * vec4(position, 1.)).xyz;
|
|
78
|
+
world.normal = mat3(modelMatrix) * normal;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
vec4 project_model_to_clipspace(vec4 position) {
|
|
82
|
+
return viewProjectionMatrix * modelMatrix * position;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
vec4 project_model_to_clipspace(vec3 position) {
|
|
86
|
+
return viewProjectionMatrix * modelMatrix * vec4(position, 1.);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
vec4 project_world_to_clipspace(vec3 position) {
|
|
90
|
+
return viewProjectionMatrix * vec4(position, 1.);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
vec4 project_view_to_clipspace(vec3 position) {
|
|
94
|
+
return projectionMatrix * vec4(position, 1.);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
vec4 project_to_clipspace(vec3 position) {
|
|
98
|
+
return viewProjectionMatrix * vec4(position, 1.);
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
const fs = `
|
|
102
|
+
${common}\
|
|
103
|
+
`;
|
|
39
104
|
export const project = {
|
|
40
105
|
name: 'project',
|
|
41
106
|
getUniforms,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/project/project.js"],"names":["Matrix4","IDENTITY_MATRIX","DEFAULT_MODULE_OPTIONS","modelMatrix","viewMatrix","projectionMatrix","cameraPositionWorld","getUniforms","opts","prevUniforms","uniforms","undefined","viewProjectionMatrix","multiplyRight","common","vs","fs","project","name"],"mappings":"AAEA,SAAQA,OAAR,QAAsB,eAAtB;AAEA,MAAMC,eAAe,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,EAA8C,CAA9C,CAAxB;AAEA,MAAMC,sBAAsB,GAAG;AAC7BC,EAAAA,WAAW,EAAEF,eADgB;AAE7BG,EAAAA,UAAU,EAAEH,eAFiB;AAG7BI,EAAAA,gBAAgB,EAAEJ,eAHW;AAI7BK,EAAAA,mBAAmB,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP;AAJQ,CAA/B;;AAOA,SAASC,WAAT,CAAqBC,IAAI,GAAGN,sBAA5B,EAAoDO,YAAY,GAAG,EAAnE,EAAuE;AAKrE,QAAMC,QAAQ,GAAG,EAAjB;;AACA,MAAIF,IAAI,CAACL,WAAL,KAAqBQ,SAAzB,EAAoC;AAClCD,IAAAA,QAAQ,CAACP,WAAT,GAAuBK,IAAI,CAACL,WAA5B;AACD;;AACD,MAAIK,IAAI,CAACJ,UAAL,KAAoBO,SAAxB,EAAmC;AACjCD,IAAAA,QAAQ,CAACN,UAAT,GAAsBI,IAAI,CAACJ,UAA3B;AACD;;AACD,MAAII,IAAI,CAACH,gBAAL,KAA0BM,SAA9B,EAAyC;AACvCD,IAAAA,QAAQ,CAACL,gBAAT,GAA4BG,IAAI,CAACH,gBAAjC;AACD;;AACD,MAAIG,IAAI,CAACF,mBAAL,KAA6BK,SAAjC,EAA4C;AAC1CD,IAAAA,QAAQ,CAACJ,mBAAT,GAA+BE,IAAI,CAACF,mBAApC;AACD;;AAGD,MAAIE,IAAI,CAACH,gBAAL,KAA0BM,SAA1B,IAAuCH,IAAI,CAACJ,UAAL,KAAoBO,SAA/D,EAA0E;AACxED,IAAAA,QAAQ,CAACE,oBAAT,GAAgC,IAAIZ,OAAJ,CAAYQ,IAAI,CAACH,gBAAjB,EAAmCQ,aAAnC,CAC9BL,IAAI,CAACJ,UADyB,CAAhC;AAGD;;AAED,SAAOM,QAAP;AACD;;AAED,MAAMI,MAAM,
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/project/project.js"],"names":["Matrix4","IDENTITY_MATRIX","DEFAULT_MODULE_OPTIONS","modelMatrix","viewMatrix","projectionMatrix","cameraPositionWorld","getUniforms","opts","prevUniforms","uniforms","undefined","viewProjectionMatrix","multiplyRight","common","vs","fs","project","name"],"mappings":"AAEA,SAAQA,OAAR,QAAsB,eAAtB;AAEA,MAAMC,eAAe,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,EAA8C,CAA9C,CAAxB;AAEA,MAAMC,sBAAsB,GAAG;AAC7BC,EAAAA,WAAW,EAAEF,eADgB;AAE7BG,EAAAA,UAAU,EAAEH,eAFiB;AAG7BI,EAAAA,gBAAgB,EAAEJ,eAHW;AAI7BK,EAAAA,mBAAmB,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP;AAJQ,CAA/B;;AAOA,SAASC,WAAT,CAAqBC,IAAI,GAAGN,sBAA5B,EAAoDO,YAAY,GAAG,EAAnE,EAAuE;AAKrE,QAAMC,QAAQ,GAAG,EAAjB;;AACA,MAAIF,IAAI,CAACL,WAAL,KAAqBQ,SAAzB,EAAoC;AAClCD,IAAAA,QAAQ,CAACP,WAAT,GAAuBK,IAAI,CAACL,WAA5B;AACD;;AACD,MAAIK,IAAI,CAACJ,UAAL,KAAoBO,SAAxB,EAAmC;AACjCD,IAAAA,QAAQ,CAACN,UAAT,GAAsBI,IAAI,CAACJ,UAA3B;AACD;;AACD,MAAII,IAAI,CAACH,gBAAL,KAA0BM,SAA9B,EAAyC;AACvCD,IAAAA,QAAQ,CAACL,gBAAT,GAA4BG,IAAI,CAACH,gBAAjC;AACD;;AACD,MAAIG,IAAI,CAACF,mBAAL,KAA6BK,SAAjC,EAA4C;AAC1CD,IAAAA,QAAQ,CAACJ,mBAAT,GAA+BE,IAAI,CAACF,mBAApC;AACD;;AAGD,MAAIE,IAAI,CAACH,gBAAL,KAA0BM,SAA1B,IAAuCH,IAAI,CAACJ,UAAL,KAAoBO,SAA/D,EAA0E;AACxED,IAAAA,QAAQ,CAACE,oBAAT,GAAgC,IAAIZ,OAAJ,CAAYQ,IAAI,CAACH,gBAAjB,EAAmCQ,aAAnC,CAC9BL,IAAI,CAACJ,UADyB,CAAhC;AAGD;;AAED,SAAOM,QAAP;AACD;;AAED,MAAMI,MAAM,GAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAXA;AAaA,MAAMC,EAAE,GAAI;AACZ,EAAED,MAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CApDA;AAwDA,MAAME,EAAE,GAAI;AACZ,EAAEF,MAAO;AACT,CAFA;AAKA,OAAO,MAAMG,OAAO,GAAG;AACrBC,EAAAA,IAAI,EAAE,SADe;AAErBX,EAAAA,WAFqB;AAGrBQ,EAAAA,EAHqB;AAIrBC,EAAAA;AAJqB,CAAhB","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport {Matrix4} from '@math.gl/core';\n\nconst IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\nconst DEFAULT_MODULE_OPTIONS = {\n modelMatrix: IDENTITY_MATRIX,\n viewMatrix: IDENTITY_MATRIX,\n projectionMatrix: IDENTITY_MATRIX,\n cameraPositionWorld: [0, 0, 0]\n};\n\nfunction getUniforms(opts = DEFAULT_MODULE_OPTIONS, prevUniforms = {}) {\n // const viewProjectionInverse = viewProjection.invert();\n // viewInverseMatrix: view.invert(),\n // viewProjectionInverseMatrix: viewProjectionInverse\n\n const uniforms = {};\n if (opts.modelMatrix !== undefined) {\n uniforms.modelMatrix = opts.modelMatrix;\n }\n if (opts.viewMatrix !== undefined) {\n uniforms.viewMatrix = opts.viewMatrix;\n }\n if (opts.projectionMatrix !== undefined) {\n uniforms.projectionMatrix = opts.projectionMatrix;\n }\n if (opts.cameraPositionWorld !== undefined) {\n uniforms.cameraPositionWorld = opts.cameraPositionWorld;\n }\n\n // COMPOSITE UNIFORMS\n if (opts.projectionMatrix !== undefined || opts.viewMatrix !== undefined) {\n uniforms.viewProjectionMatrix = new Matrix4(opts.projectionMatrix).multiplyRight(\n opts.viewMatrix\n );\n }\n\n return uniforms;\n}\n\nconst common = `\\\nvarying vec4 project_vPositionWorld;\nvarying vec3 project_vNormalWorld;\n\nvec4 project_getPosition_World() {\n return project_vPositionWorld;\n}\n\nvec3 project_getNormal_World() {\n return project_vNormalWorld;\n}\n`;\n\nconst vs = `\\\n${common}\n\n// Unprefixed uniforms\nuniform mat4 modelMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewProjectionMatrix;\nuniform vec3 cameraPositionWorld;\n\nstruct World {\n vec3 position;\n vec3 normal;\n};\n\nWorld world;\n\nvoid project_setPosition(vec4 position) {\n project_vPositionWorld = position;\n}\n\nvoid project_setNormal(vec3 normal) {\n project_vNormalWorld = normal;\n}\n\nvoid project_setPositionAndNormal_World(vec3 position, vec3 normal) {\n world.position = position;\n world.normal = normal;\n}\n\nvoid project_setPositionAndNormal_Model(vec3 position, vec3 normal) {\n world.position = (modelMatrix * vec4(position, 1.)).xyz;\n world.normal = mat3(modelMatrix) * normal;\n}\n\nvec4 project_model_to_clipspace(vec4 position) {\n return viewProjectionMatrix * modelMatrix * position;\n}\n\nvec4 project_model_to_clipspace(vec3 position) {\n return viewProjectionMatrix * modelMatrix * vec4(position, 1.);\n}\n\nvec4 project_world_to_clipspace(vec3 position) {\n return viewProjectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_view_to_clipspace(vec3 position) {\n return projectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_to_clipspace(vec3 position) {\n return viewProjectionMatrix * vec4(position, 1.);\n}\n`;\n\nconst fs = `\n${common}\\\n`;\n\n/** @type {ShaderModule} */\nexport const project = {\n name: 'project',\n getUniforms,\n vs,\n fs\n};\n"],"file":"project.js"}
|
|
@@ -1,4 +1,31 @@
|
|
|
1
|
-
const vs =
|
|
1
|
+
const vs = `\
|
|
2
|
+
attribute float transform_elementID;
|
|
3
|
+
vec2 transform_getPixelSizeHalf(vec2 size) {
|
|
4
|
+
return vec2(1.) / (2. * size);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
vec2 transform_getPixelIndices(vec2 texSize, vec2 pixelSizeHalf) {
|
|
8
|
+
float yIndex = floor((transform_elementID / texSize[0]) + pixelSizeHalf[1]);
|
|
9
|
+
float xIndex = transform_elementID - (yIndex * texSize[0]);
|
|
10
|
+
return vec2(xIndex, yIndex);
|
|
11
|
+
}
|
|
12
|
+
vec2 transform_getTexCoord(vec2 size) {
|
|
13
|
+
vec2 pixelSizeHalf = transform_getPixelSizeHalf(size);
|
|
14
|
+
vec2 indices = transform_getPixelIndices(size, pixelSizeHalf);
|
|
15
|
+
vec2 coord = indices / size + pixelSizeHalf;
|
|
16
|
+
return coord;
|
|
17
|
+
}
|
|
18
|
+
vec2 transform_getPos(vec2 size) {
|
|
19
|
+
vec2 texCoord = transform_getTexCoord(size);
|
|
20
|
+
vec2 pos = (texCoord * (2.0, 2.0)) - (1., 1.);
|
|
21
|
+
return pos;
|
|
22
|
+
}
|
|
23
|
+
vec4 transform_getInput(sampler2D texSampler, vec2 size) {
|
|
24
|
+
vec2 texCoord = transform_getTexCoord(size);
|
|
25
|
+
vec4 textureColor = texture2D(texSampler, texCoord);
|
|
26
|
+
return textureColor;
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
2
29
|
export const transform = {
|
|
3
30
|
name: 'transform',
|
|
4
31
|
vs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/transform/transform.js"],"names":["vs","transform","name","fs"],"mappings":"AAEA,MAAMA,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/transform/transform.js"],"names":["vs","transform","name","fs"],"mappings":"AAEA,MAAMA,EAAE,GAAI;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA3BA;AA0CA,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,IAAI,EAAE,WADiB;AAEvBF,EAAAA,EAFuB;AAGvBG,EAAAA,EAAE,EAAE;AAHmB,CAAlB","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nconst vs = `\\\nattribute float transform_elementID;\n\n// returns half of pixel size, used to move the pixel position to center of the pixel.\nvec2 transform_getPixelSizeHalf(vec2 size) {\n return vec2(1.) / (2. * size);\n}\n\n// returns current elements pixel indeces [x, y],\n// where x ranges in [0 to texSize-1] and y ranges in [0 to texSize-1]\nvec2 transform_getPixelIndices(vec2 texSize, vec2 pixelSizeHalf) {\n // Add safe offset (half of pixel height) before doing floor\n float yIndex = floor((transform_elementID / texSize[0]) + pixelSizeHalf[1]);\n float xIndex = transform_elementID - (yIndex * texSize[0]);\n return vec2(xIndex, yIndex);\n}\n\n// returns current elementID's texture co-ordianate\nvec2 transform_getTexCoord(vec2 size) {\n vec2 pixelSizeHalf = transform_getPixelSizeHalf(size);\n vec2 indices = transform_getPixelIndices(size, pixelSizeHalf);\n vec2 coord = indices / size + pixelSizeHalf;\n return coord;\n}\n\n// returns current elementID's position\nvec2 transform_getPos(vec2 size) {\n vec2 texCoord = transform_getTexCoord(size);\n // Change from [0 1] range to [-1 1]\n vec2 pos = (texCoord * (2.0, 2.0)) - (1., 1.);\n return pos;\n}\n\n// returns current elementID's pixel value\nvec4 transform_getInput(sampler2D texSampler, vec2 size) {\n vec2 texCoord = transform_getTexCoord(size);\n vec4 textureColor = texture2D(texSampler, texCoord);\n return textureColor;\n}\n`;\n\n/** @type {ShaderModule} */\nexport const transform = {\n name: 'transform',\n vs,\n fs: null\n};\n"],"file":"transform.js"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
const fs =
|
|
1
|
+
const fs = `\
|
|
2
|
+
float random(vec3 scale, float seed) {
|
|
3
|
+
return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);
|
|
4
|
+
}
|
|
5
|
+
`;
|
|
2
6
|
export const random = {
|
|
3
7
|
name: 'random',
|
|
4
8
|
fs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/utils/random.js"],"names":["fs","random","name"],"mappings":"AAEA,MAAMA,EAAE
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/utils/random.js"],"names":["fs","random","name"],"mappings":"AAEA,MAAMA,EAAE,GAAI;AACZ;AACA;AACA;AACA,CAJA;AAOA,OAAO,MAAMC,MAAM,GAAG;AACpBC,EAAAA,IAAI,EAAE,QADc;AAEpBF,EAAAA;AAFoB,CAAf","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nconst fs = `\\\nfloat random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n`;\n\nexport const random = {\n name: 'random',\n fs\n};\n"],"file":"random.js"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { assert } from '../utils';
|
|
2
|
-
const FS100 =
|
|
3
|
-
const FS_GLES =
|
|
4
|
-
|
|
2
|
+
const FS100 = `void main() {gl_FragColor = vec4(0);}`;
|
|
3
|
+
const FS_GLES = `\
|
|
4
|
+
out vec4 transform_output;
|
|
5
|
+
void main() {
|
|
6
|
+
transform_output = vec4(0);
|
|
7
|
+
}`;
|
|
8
|
+
const FS300 = `#version 300 es\n${FS_GLES}`;
|
|
5
9
|
export function getQualifierDetails(line, qualifiers) {
|
|
6
10
|
qualifiers = Array.isArray(qualifiers) ? qualifiers : [qualifiers];
|
|
7
11
|
const words = line.replace(/^\s+/, '').split(/\s+/);
|
|
@@ -30,7 +34,7 @@ export function getPassthroughFS(options = {}) {
|
|
|
30
34
|
if (version === 300) {
|
|
31
35
|
return FS300;
|
|
32
36
|
} else if (version > 300) {
|
|
33
|
-
return
|
|
37
|
+
return `#version ${version}\n${FS_GLES}`;
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
return FS100;
|
|
@@ -39,10 +43,20 @@ export function getPassthroughFS(options = {}) {
|
|
|
39
43
|
const outputValue = convertToVec4(input, inputType);
|
|
40
44
|
|
|
41
45
|
if (version >= 300) {
|
|
42
|
-
return
|
|
46
|
+
return `\
|
|
47
|
+
#version ${version} ${version === 300 ? 'es' : ''}
|
|
48
|
+
in ${inputType} ${input};
|
|
49
|
+
out vec4 ${output};
|
|
50
|
+
void main() {
|
|
51
|
+
${output} = ${outputValue};
|
|
52
|
+
}`;
|
|
43
53
|
}
|
|
44
54
|
|
|
45
|
-
return
|
|
55
|
+
return `\
|
|
56
|
+
varying ${inputType} ${input};
|
|
57
|
+
void main() {
|
|
58
|
+
gl_FragColor = ${outputValue};
|
|
59
|
+
}`;
|
|
46
60
|
}
|
|
47
61
|
export function typeToChannelSuffix(type) {
|
|
48
62
|
switch (type) {
|
|
@@ -85,13 +99,13 @@ export function typeToChannelCount(type) {
|
|
|
85
99
|
export function convertToVec4(variable, type) {
|
|
86
100
|
switch (type) {
|
|
87
101
|
case 'float':
|
|
88
|
-
return
|
|
102
|
+
return `vec4(${variable}, 0.0, 0.0, 1.0)`;
|
|
89
103
|
|
|
90
104
|
case 'vec2':
|
|
91
|
-
return
|
|
105
|
+
return `vec4(${variable}, 0.0, 1.0)`;
|
|
92
106
|
|
|
93
107
|
case 'vec3':
|
|
94
|
-
return
|
|
108
|
+
return `vec4(${variable}, 1.0)`;
|
|
95
109
|
|
|
96
110
|
case 'vec4':
|
|
97
111
|
return variable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/shader-utils.js"],"names":["assert","FS100","FS_GLES","FS300","getQualifierDetails","line","qualifiers","Array","isArray","words","replace","split","qualifier","type","definition","includes","name","getPassthroughFS","options","version","input","inputType","output","outputValue","convertToVec4","typeToChannelSuffix","typeToChannelCount","variable"],"mappings":"AAAA,SAAQA,MAAR,QAAqB,UAArB;AACA,MAAMC,KAAK,
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/shader-utils.js"],"names":["assert","FS100","FS_GLES","FS300","getQualifierDetails","line","qualifiers","Array","isArray","words","replace","split","qualifier","type","definition","includes","name","getPassthroughFS","options","version","input","inputType","output","outputValue","convertToVec4","typeToChannelSuffix","typeToChannelCount","variable"],"mappings":"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","sourcesContent":["import {assert} from '../utils';\nconst FS100 = `void main() {gl_FragColor = vec4(0);}`;\nconst FS_GLES = `\\\nout vec4 transform_output;\nvoid main() {\n transform_output = vec4(0);\n}`;\nconst FS300 = `#version 300 es\\n${FS_GLES}`;\n\n// Prase given glsl line and return qualifier details or null\nexport function getQualifierDetails(line, qualifiers) {\n qualifiers = Array.isArray(qualifiers) ? qualifiers : [qualifiers];\n const words = line.replace(/^\\s+/, '').split(/\\s+/);\n // TODO add support for precession qualifiers (highp, mediump and lowp)\n const [qualifier, type, definition] = words;\n if (!qualifiers.includes(qualifier) || !type || !definition) {\n return null;\n }\n const name = definition.split(';')[0];\n return {qualifier, type, name};\n}\n\n// Given the shader version, input and output variable names,\n// builds and return a pass through fragment shader.\nexport function getPassthroughFS(options = {}) {\n const {version = 100, input, inputType, output} = options;\n if (!input) {\n if (version === 300) {\n // Fast-path for WebGL 2.0\n return FS300;\n } else if (version > 300) {\n // Use the supplied version for OpenGL/ES 3.2+\n return `#version ${version}\\n${FS_GLES}`;\n }\n // Fast-path for WebGL 1.0\n return FS100;\n }\n const outputValue = convertToVec4(input, inputType);\n if (version >= 300) {\n // If version is 300, assume WebGL 2.0\n return `\\\n#version ${version} ${version === 300 ? 'es' : ''}\nin ${inputType} ${input};\nout vec4 ${output};\nvoid main() {\n ${output} = ${outputValue};\n}`;\n }\n // WebGL 1.0\n return `\\\nvarying ${inputType} ${input};\nvoid main() {\n gl_FragColor = ${outputValue};\n}`;\n}\n\n// convert glsl type to suffix\nexport function typeToChannelSuffix(type) {\n switch (type) {\n case 'float':\n return 'x';\n case 'vec2':\n return 'xy';\n case 'vec3':\n return 'xyz';\n case 'vec4':\n return 'xyzw';\n default:\n assert(false);\n return null;\n }\n}\n\n// convert glsl type to channel count\nexport function typeToChannelCount(type) {\n switch (type) {\n case 'float':\n return 1;\n case 'vec2':\n return 2;\n case 'vec3':\n return 3;\n case 'vec4':\n return 4;\n default:\n assert(false);\n return null;\n }\n}\n\n// Returns glsl instruction for converting to vec4\nexport function convertToVec4(variable, type) {\n switch (type) {\n case 'float':\n return `vec4(${variable}, 0.0, 0.0, 1.0)`;\n case 'vec2':\n return `vec4(${variable}, 0.0, 1.0)`;\n case 'vec3':\n return `vec4(${variable}, 1.0)`;\n case 'vec4':\n return variable;\n default:\n assert(false);\n return null;\n }\n}\n"],"file":"shader-utils.js"}
|
|
@@ -48,15 +48,11 @@ function identifyGPUVendor(vendor, renderer) {
|
|
|
48
48
|
return 'INTEL';
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
if (vendor.match(/Apple/i) || renderer.match(/Apple/i)) {
|
|
52
|
-
return 'APPLE';
|
|
53
|
-
}
|
|
54
|
-
|
|
55
51
|
if (vendor.match(/AMD/i) || renderer.match(/AMD/i) || vendor.match(/ATI/i) || renderer.match(/ATI/i)) {
|
|
56
52
|
return 'AMD';
|
|
57
53
|
}
|
|
58
54
|
|
|
59
|
-
return 'UNKNOWN';
|
|
55
|
+
return 'UNKNOWN GPU';
|
|
60
56
|
}
|
|
61
57
|
|
|
62
58
|
const compiledGlslExtensions = {};
|
|
@@ -74,7 +70,7 @@ export function canCompileGLGSExtension(gl, cap, opts = {}) {
|
|
|
74
70
|
|
|
75
71
|
const extensionName = feature[0];
|
|
76
72
|
const behavior = opts.behavior || 'enable';
|
|
77
|
-
const source =
|
|
73
|
+
const source = `#extension GL_${extensionName} : ${behavior}\nvoid main(void) {}`;
|
|
78
74
|
const shader = gl.createShader(35633);
|
|
79
75
|
gl.shaderSource(shader, source);
|
|
80
76
|
gl.compileShader(shader);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/webgl-info.js"],"names":["isOldIE","assert","GL_VENDOR","GL_RENDERER","GL_VERSION","GL_SHADING_LANGUAGE_VERSION","WEBGL_FEATURES","GLSL_FRAG_DATA","GLSL_FRAG_DEPTH","GLSL_DERIVATIVES","GLSL_TEXTURE_LOD","FEATURES","Object","keys","forEach","key","isWebGL2","gl","WebGL2RenderingContext","Boolean","_version","getContextInfo","info","getExtension","vendor","getParameter","UNMASKED_VENDOR_WEBGL","renderer","UNMASKED_RENDERER_WEBGL","gpuVendor","identifyGPUVendor","gpuInfo","version","shadingLanguageVersion","match","compiledGlslExtensions","canCompileGLGSExtension","cap","opts","feature","extensionName","behavior","source","shader","createShader","shaderSource","compileShader","canCompile","getShaderParameter","deleteShader","getFeature","value","hasFeatures","features","Array","isArray","every"],"mappings":"AAMA,OAAOA,OAAP,MAAoB,aAApB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AAEA,MAAMC,SAAS,GAAG,MAAlB;AACA,MAAMC,WAAW,GAAG,MAApB;AACA,MAAMC,UAAU,GAAG,MAAnB;AACA,MAAMC,2BAA2B,GAAG,MAApC;AAGA,MAAMC,cAAc,GAAG;AAErBC,EAAAA,cAAc,EAAE,CAAC,oBAAD,EAAuB,IAAvB,CAFK;AAGrBC,EAAAA,eAAe,EAAE,CAAC,gBAAD,EAAmB,IAAnB,CAHI;AAIrBC,EAAAA,gBAAgB,EAAE,CAAC,0BAAD,EAA6B,IAA7B,CAJG;AAKrBC,EAAAA,gBAAgB,EAAE,CAAC,wBAAD,EAA2B,IAA3B;AALG,CAAvB;AASA,MAAMC,QAAQ,GAAG,EAAjB;AACAC,MAAM,CAACC,IAAP,CAAYP,cAAZ,EAA4BQ,OAA5B,CAAoCC,GAAG,IAAI;AACzCJ,EAAAA,QAAQ,CAACI,GAAD,CAAR,GAAgBA,GAAhB;AACD,CAFD;AAIA,SAAQJ,QAAR;;AAEA,SAASK,QAAT,CAAkBC,EAAlB,EAAsB;AACpB,MAAI,OAAOC,sBAAP,KAAkC,WAAlC,IAAiDD,EAAE,YAAYC,sBAAnE,EAA2F;AACzF,WAAO,IAAP;AACD;;AACD,SAAOC,OAAO,CAACF,EAAE,IAAIA,EAAE,CAACG,QAAH,KAAgB,CAAvB,CAAd;AACD;;AAED,OAAO,SAASC,cAAT,CAAwBJ,EAAxB,EAA4B;AACjC,QAAMK,IAAI,GAAGL,EAAE,CAACM,YAAH,CAAgB,2BAAhB,CAAb;AACA,QAAMC,MAAM,GAAGP,EAAE,CAACQ,YAAH,CAAiBH,IAAI,IAAIA,IAAI,CAACI,qBAAd,IAAwCxB,SAAxD,CAAf;AACA,QAAMyB,QAAQ,GAAGV,EAAE,CAACQ,YAAH,CAAiBH,IAAI,IAAIA,IAAI,CAACM,uBAAd,IAA0CzB,WAA1D,CAAjB;AACA,QAAM0B,SAAS,GAAGC,iBAAiB,CAACN,MAAD,EAASG,QAAT,CAAnC;AACA,QAAMI,OAAO,GAAG;AACdF,IAAAA,SADc;AAEdL,IAAAA,MAFc;AAGdG,IAAAA,QAHc;AAIdK,IAAAA,OAAO,EAAEf,EAAE,CAACQ,YAAH,CAAgBrB,UAAhB,CAJK;AAKd6B,IAAAA,sBAAsB,EAAEhB,EAAE,CAACQ,YAAH,CAAgBpB,2BAAhB;AALV,GAAhB;AAOA,SAAO0B,OAAP;AACD;;AAED,SAASD,iBAAT,CAA2BN,MAA3B,EAAmCG,QAAnC,EAA6C;AAC3C,MAAIH,MAAM,CAACU,KAAP,CAAa,SAAb,KAA2BP,QAAQ,CAACO,KAAT,CAAe,SAAf,CAA/B,EAA0D;AACxD,WAAO,QAAP;AACD;;AACD,MAAIV,MAAM,CAACU,KAAP,CAAa,QAAb,KAA0BP,QAAQ,CAACO,KAAT,CAAe,QAAf,CAA9B,EAAwD;AACtD,WAAO,OAAP;AACD;;AACD,
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/webgl-info.js"],"names":["isOldIE","assert","GL_VENDOR","GL_RENDERER","GL_VERSION","GL_SHADING_LANGUAGE_VERSION","WEBGL_FEATURES","GLSL_FRAG_DATA","GLSL_FRAG_DEPTH","GLSL_DERIVATIVES","GLSL_TEXTURE_LOD","FEATURES","Object","keys","forEach","key","isWebGL2","gl","WebGL2RenderingContext","Boolean","_version","getContextInfo","info","getExtension","vendor","getParameter","UNMASKED_VENDOR_WEBGL","renderer","UNMASKED_RENDERER_WEBGL","gpuVendor","identifyGPUVendor","gpuInfo","version","shadingLanguageVersion","match","compiledGlslExtensions","canCompileGLGSExtension","cap","opts","feature","extensionName","behavior","source","shader","createShader","shaderSource","compileShader","canCompile","getShaderParameter","deleteShader","getFeature","value","hasFeatures","features","Array","isArray","every"],"mappings":"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","sourcesContent":["// Feature detection for WebGL\n//\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\n/* eslint-disable no-inline-comments, max-len */\nimport isOldIE from './is-old-ie';\nimport assert from './assert';\n\nconst GL_VENDOR = 0x1f00;\nconst GL_RENDERER = 0x1f01;\nconst GL_VERSION = 0x1f02;\nconst GL_SHADING_LANGUAGE_VERSION = 0x8b8c;\n\n// Defines luma.gl \"feature\" names and semantics\nconst WEBGL_FEATURES = {\n // GLSL extensions\n GLSL_FRAG_DATA: ['WEBGL_draw_buffers', true], // TODO - name makes no sense in GLSL 3.00\n GLSL_FRAG_DEPTH: ['EXT_frag_depth', true],\n GLSL_DERIVATIVES: ['OES_standard_derivatives', true],\n GLSL_TEXTURE_LOD: ['EXT_shader_texture_lod', true]\n};\n\n// Create a key-mirrored FEATURES array\nconst FEATURES = {};\nObject.keys(WEBGL_FEATURES).forEach(key => {\n FEATURES[key] = key;\n});\n\nexport {FEATURES};\n\nfunction isWebGL2(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n return Boolean(gl && gl._version === 2);\n}\n\nexport function getContextInfo(gl) {\n const info = gl.getExtension('WEBGL_debug_renderer_info');\n const vendor = gl.getParameter((info && info.UNMASKED_VENDOR_WEBGL) || GL_VENDOR);\n const renderer = gl.getParameter((info && info.UNMASKED_RENDERER_WEBGL) || GL_RENDERER);\n const gpuVendor = identifyGPUVendor(vendor, renderer);\n const gpuInfo = {\n gpuVendor,\n vendor,\n renderer,\n version: gl.getParameter(GL_VERSION),\n shadingLanguageVersion: gl.getParameter(GL_SHADING_LANGUAGE_VERSION)\n };\n return gpuInfo;\n}\n\nfunction identifyGPUVendor(vendor, renderer) {\n if (vendor.match(/NVIDIA/i) || renderer.match(/NVIDIA/i)) {\n return 'NVIDIA';\n }\n if (vendor.match(/INTEL/i) || renderer.match(/INTEL/i)) {\n return 'INTEL';\n }\n if (\n vendor.match(/AMD/i) ||\n renderer.match(/AMD/i) ||\n vendor.match(/ATI/i) ||\n renderer.match(/ATI/i)\n ) {\n return 'AMD';\n }\n return 'UNKNOWN GPU';\n}\n\nconst compiledGlslExtensions = {};\n\n// Enables feature detection in IE11 due to a bug where gl.getExtension may return true\n// but fail to compile when the extension is enabled in the shader. Specifically,\n// the OES_standard_derivatives and WEBGL_draw_buffers extensions fails to compile in IE11 even though its included\n// in the list of supported extensions.\n// opts allows user agent to be overridden for testing\n/*\n* Inputs :\n* gl : WebGL context\n* cap : Key of WEBGL_FEATURES object identifying the extension\n* opts :\n* behavior : behavior of extension to be tested, by defualt `enable` is used\n* Returns : true, if shader is compiled successfully, false otherwise\n*/\nexport function canCompileGLGSExtension(gl, cap, opts = {}) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n if (!isOldIE(opts)) {\n return true;\n }\n\n if (cap in compiledGlslExtensions) {\n return compiledGlslExtensions[cap];\n }\n\n const extensionName = feature[0];\n const behavior = opts.behavior || 'enable';\n const source = `#extension GL_${extensionName} : ${behavior}\\nvoid main(void) {}`;\n\n const shader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n gl.deleteShader(shader);\n compiledGlslExtensions[cap] = canCompile;\n return canCompile;\n}\n\n// TODO - cache the value\nfunction getFeature(gl, cap) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n // Get extension name from table\n const extensionName = isWebGL2(gl) ? feature[1] || feature[0] : feature[0];\n\n // Check if the value is dependent on checking an extension\n const value =\n typeof extensionName === 'string' ? Boolean(gl.getExtension(extensionName)) : extensionName;\n\n assert(value === false || value === true);\n\n return value;\n}\n\nexport function hasFeatures(gl, features) {\n features = Array.isArray(features) ? features : [features];\n return features.every(feature => getFeature(gl, feature));\n}\n"],"file":"webgl-info.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/shadertools",
|
|
3
|
-
"version": "8.5.
|
|
3
|
+
"version": "8.5.10",
|
|
4
4
|
"description": "Shader module system for luma.gl",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"@babel/runtime": "^7.0.0",
|
|
40
40
|
"@math.gl/core": "^3.5.0"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "830155841c1e574d36061c2d71880a28d68b3cb3"
|
|
43
43
|
}
|
|
@@ -36,6 +36,10 @@ export function getPlatformShaderDefines(gl) {
|
|
|
36
36
|
#define DEFAULT_GPU
|
|
37
37
|
// Prevent driver from optimizing away the calculation necessary for emulated fp64
|
|
38
38
|
#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
|
|
39
|
+
// Intel's built-in 'tan' function doesn't have acceptable precision
|
|
40
|
+
#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
|
|
41
|
+
// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
|
|
42
|
+
#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
|
|
39
43
|
`;
|
|
40
44
|
}
|
|
41
45
|
}
|
package/src/utils/webgl-info.js
CHANGED
|
@@ -58,9 +58,6 @@ function identifyGPUVendor(vendor, renderer) {
|
|
|
58
58
|
if (vendor.match(/INTEL/i) || renderer.match(/INTEL/i)) {
|
|
59
59
|
return 'INTEL';
|
|
60
60
|
}
|
|
61
|
-
if (vendor.match(/Apple/i) || renderer.match(/Apple/i)) {
|
|
62
|
-
return 'APPLE';
|
|
63
|
-
}
|
|
64
61
|
if (
|
|
65
62
|
vendor.match(/AMD/i) ||
|
|
66
63
|
renderer.match(/AMD/i) ||
|
|
@@ -69,7 +66,7 @@ function identifyGPUVendor(vendor, renderer) {
|
|
|
69
66
|
) {
|
|
70
67
|
return 'AMD';
|
|
71
68
|
}
|
|
72
|
-
return 'UNKNOWN';
|
|
69
|
+
return 'UNKNOWN GPU';
|
|
73
70
|
}
|
|
74
71
|
|
|
75
72
|
const compiledGlslExtensions = {};
|
package/src/.DS_Store
DELETED
|
Binary file
|