@luma.gl/shadertools 8.5.15 → 8.5.17

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.
Files changed (117) hide show
  1. package/dist/dist.js +75 -75
  2. package/dist/dist.min.js +1 -1
  3. package/dist/es5/index.js +10 -10
  4. package/dist/es5/lib/assemble-shaders.js +6 -2
  5. package/dist/es5/lib/assemble-shaders.js.map +1 -1
  6. package/dist/es5/lib/constants.js +1 -1
  7. package/dist/es5/lib/inject-shader.js +2 -2
  8. package/dist/es5/lib/resolve-modules.js +2 -2
  9. package/dist/es5/lib/shader-module.js +1 -1
  10. package/dist/es5/lib/shader-module.js.map +1 -1
  11. package/dist/es5/lib/transpile-shader.js +1 -1
  12. package/dist/es5/modules/fp64/fp64-utils.js +1 -1
  13. package/dist/es5/modules/fp64/fp64.js +6 -5
  14. package/dist/es5/modules/fp64/fp64.js.map +1 -1
  15. package/dist/es5/modules/index.js +62 -62
  16. package/dist/es5/modules/lights/lights.js +1 -1
  17. package/dist/es5/modules/lights/lights.js.map +1 -1
  18. package/dist/es5/modules/module-injectors.js +1 -1
  19. package/dist/es5/modules/phong-lighting/phong-lighting.js.map +1 -1
  20. package/dist/es5/utils/shader-utils.js +3 -3
  21. package/dist/es5/utils/shader-utils.js.map +1 -1
  22. package/dist/es5/utils/webgl-info.js +2 -2
  23. package/dist/esm/lib/assemble-shaders.js +38 -51
  24. package/dist/esm/lib/assemble-shaders.js.map +1 -1
  25. package/dist/esm/lib/inject-shader.js +4 -3
  26. package/dist/esm/lib/inject-shader.js.map +1 -1
  27. package/dist/esm/lib/platform-defines.js +9 -80
  28. package/dist/esm/lib/platform-defines.js.map +1 -1
  29. package/dist/esm/lib/resolve-modules.js +9 -7
  30. package/dist/esm/lib/resolve-modules.js.map +1 -1
  31. package/dist/esm/lib/shader-module.js +20 -23
  32. package/dist/esm/lib/shader-module.js.map +1 -1
  33. package/dist/esm/lib/transpile-shader.js +5 -5
  34. package/dist/esm/lib/transpile-shader.js.map +1 -1
  35. package/dist/esm/modules/dirlight/dirlight.js +3 -9
  36. package/dist/esm/modules/dirlight/dirlight.js.map +1 -1
  37. package/dist/esm/modules/fp32/fp32.js +1 -148
  38. package/dist/esm/modules/fp32/fp32.js.map +1 -1
  39. package/dist/esm/modules/fp64/fp64-arithmetic.glsl.js +1 -143
  40. package/dist/esm/modules/fp64/fp64-arithmetic.glsl.js.map +1 -1
  41. package/dist/esm/modules/fp64/fp64-functions.glsl.js +1 -630
  42. package/dist/esm/modules/fp64/fp64-functions.glsl.js.map +1 -1
  43. package/dist/esm/modules/fp64/fp64-utils.js +3 -1
  44. package/dist/esm/modules/fp64/fp64-utils.js.map +1 -1
  45. package/dist/esm/modules/fxaa/fxaa.js +1 -535
  46. package/dist/esm/modules/fxaa/fxaa.js.map +1 -1
  47. package/dist/esm/modules/geometry/geometry.js +2 -28
  48. package/dist/esm/modules/geometry/geometry.js.map +1 -1
  49. package/dist/esm/modules/image-adjust-filters/brightnesscontrast.js +1 -18
  50. package/dist/esm/modules/image-adjust-filters/brightnesscontrast.js.map +1 -1
  51. package/dist/esm/modules/image-adjust-filters/denoise.js +1 -22
  52. package/dist/esm/modules/image-adjust-filters/denoise.js.map +1 -1
  53. package/dist/esm/modules/image-adjust-filters/huesaturation.js +1 -28
  54. package/dist/esm/modules/image-adjust-filters/huesaturation.js.map +1 -1
  55. package/dist/esm/modules/image-adjust-filters/noise.js +1 -19
  56. package/dist/esm/modules/image-adjust-filters/noise.js.map +1 -1
  57. package/dist/esm/modules/image-adjust-filters/sepia.js +1 -20
  58. package/dist/esm/modules/image-adjust-filters/sepia.js.map +1 -1
  59. package/dist/esm/modules/image-adjust-filters/vibrance.js +1 -15
  60. package/dist/esm/modules/image-adjust-filters/vibrance.js.map +1 -1
  61. package/dist/esm/modules/image-adjust-filters/vignette.js +1 -14
  62. package/dist/esm/modules/image-adjust-filters/vignette.js.map +1 -1
  63. package/dist/esm/modules/image-blur-filters/tiltshift.js +1 -37
  64. package/dist/esm/modules/image-blur-filters/tiltshift.js.map +1 -1
  65. package/dist/esm/modules/image-blur-filters/triangleblur.js +1 -27
  66. package/dist/esm/modules/image-blur-filters/triangleblur.js.map +1 -1
  67. package/dist/esm/modules/image-blur-filters/zoomblur.js +1 -26
  68. package/dist/esm/modules/image-blur-filters/zoomblur.js.map +1 -1
  69. package/dist/esm/modules/image-fun-filters/colorhalftone.js +1 -34
  70. package/dist/esm/modules/image-fun-filters/colorhalftone.js.map +1 -1
  71. package/dist/esm/modules/image-fun-filters/dotscreen.js +1 -22
  72. package/dist/esm/modules/image-fun-filters/dotscreen.js.map +1 -1
  73. package/dist/esm/modules/image-fun-filters/edgework.js +1 -50
  74. package/dist/esm/modules/image-fun-filters/edgework.js.map +1 -1
  75. package/dist/esm/modules/image-fun-filters/hexagonalpixelate.js +1 -42
  76. package/dist/esm/modules/image-fun-filters/hexagonalpixelate.js.map +1 -1
  77. package/dist/esm/modules/image-fun-filters/ink.js +1 -27
  78. package/dist/esm/modules/image-fun-filters/ink.js.map +1 -1
  79. package/dist/esm/modules/image-fun-filters/magnify.js +1 -20
  80. package/dist/esm/modules/image-fun-filters/magnify.js.map +1 -1
  81. package/dist/esm/modules/image-warp-filters/bulgepinch.js +1 -27
  82. package/dist/esm/modules/image-warp-filters/bulgepinch.js.map +1 -1
  83. package/dist/esm/modules/image-warp-filters/swirl.js +1 -29
  84. package/dist/esm/modules/image-warp-filters/swirl.js.map +1 -1
  85. package/dist/esm/modules/image-warp-filters/warp.js +1 -11
  86. package/dist/esm/modules/image-warp-filters/warp.js.map +1 -1
  87. package/dist/esm/modules/lights/lights.glsl.js +1 -34
  88. package/dist/esm/modules/lights/lights.glsl.js.map +1 -1
  89. package/dist/esm/modules/lights/lights.js +19 -15
  90. package/dist/esm/modules/lights/lights.js.map +1 -1
  91. package/dist/esm/modules/module-injectors.js +2 -27
  92. package/dist/esm/modules/module-injectors.js.map +1 -1
  93. package/dist/esm/modules/pbr/pbr-fragment.glsl.js +1 -351
  94. package/dist/esm/modules/pbr/pbr-fragment.glsl.js.map +1 -1
  95. package/dist/esm/modules/pbr/pbr-vertex.glsl.js +1 -39
  96. package/dist/esm/modules/pbr/pbr-vertex.glsl.js.map +1 -1
  97. package/dist/esm/modules/phong-lighting/phong-lighting.glsl.js +1 -75
  98. package/dist/esm/modules/phong-lighting/phong-lighting.glsl.js.map +1 -1
  99. package/dist/esm/modules/phong-lighting/phong-lighting.js +3 -1
  100. package/dist/esm/modules/phong-lighting/phong-lighting.js.map +1 -1
  101. package/dist/esm/modules/picking/picking.js +4 -87
  102. package/dist/esm/modules/picking/picking.js.map +1 -1
  103. package/dist/esm/modules/project/project.js +6 -69
  104. package/dist/esm/modules/project/project.js.map +1 -1
  105. package/dist/esm/modules/transform/transform.js +1 -28
  106. package/dist/esm/modules/transform/transform.js.map +1 -1
  107. package/dist/esm/modules/utils/random.js +1 -5
  108. package/dist/esm/modules/utils/random.js.map +1 -1
  109. package/dist/esm/utils/is-old-ie.js +2 -1
  110. package/dist/esm/utils/is-old-ie.js.map +1 -1
  111. package/dist/esm/utils/shader-utils.js +11 -24
  112. package/dist/esm/utils/shader-utils.js.map +1 -1
  113. package/dist/esm/utils/webgl-info.js +3 -2
  114. package/dist/esm/utils/webgl-info.js.map +1 -1
  115. package/package.json +2 -2
  116. package/src/lib/.platform-defines.js.swp +0 -0
  117. package/src/utils/.webgl-info.js.swp +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/lights/lights.js"],"names":["INITIAL_MODULE_OPTIONS","lightSources","convertColor","color","intensity","map","component","getLightSourceUniforms","ambientLight","pointLights","directionalLights","lightSourceUniforms","forEach","pointLight","index","position","attenuation","lighting_uPointLightCount","length","directionalLight","direction","lighting_uDirectionalLightCount","getUniforms","opts","hasLights","lighting_uEnabled","Object","assign","lights","light","type","push","name","vs","lightingShader","fs","defines","MAX_LIGHTS"],"mappings":";;;;;;;;;AAEA;;;;;;;;AAEA,IAAMA,sBAAsB,GAAG;AAC7BC,EAAAA,YAAY,EAAE;AADe,CAA/B;;AAKA,SAASC,YAAT,GAAiE;AAAA,iFAAJ,EAAI;AAAA,wBAA1CC,KAA0C;AAAA,MAA1CA,KAA0C,2BAAlC,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAkC;AAAA,4BAAvBC,SAAuB;AAAA,MAAvBA,SAAuB,+BAAX,GAAW;;AAC/D,SAAOD,KAAK,CAACE,GAAN,CAAU,UAAAC,SAAS;AAAA,WAAKA,SAAS,GAAGF,SAAb,GAA0B,KAA9B;AAAA,GAAnB,CAAP;AACD;;AAED,SAASG,sBAAT,QAA0F;AAAA,MAAzDC,YAAyD,SAAzDA,YAAyD;AAAA,gCAA3CC,WAA2C;AAAA,MAA3CA,WAA2C,kCAA7B,EAA6B;AAAA,oCAAzBC,iBAAyB;AAAA,MAAzBA,iBAAyB,sCAAL,EAAK;AACxF,MAAMC,mBAAmB,GAAG,EAA5B;;AAEA,MAAIH,YAAJ,EAAkB;AAChBG,IAAAA,mBAAmB,CAAC,8BAAD,CAAnB,GAAsDT,YAAY,CAACM,YAAD,CAAlE;AACD,GAFD,MAEO;AACLG,IAAAA,mBAAmB,CAAC,8BAAD,CAAnB,GAAsD,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAtD;AACD;;AAEDF,EAAAA,WAAW,CAACG,OAAZ,CAAoB,UAACC,UAAD,EAAaC,KAAb,EAAuB;AACzCH,IAAAA,mBAAmB,gCAAyBG,KAAzB,aAAnB,GAA8DZ,YAAY,CAACW,UAAD,CAA1E;AACAF,IAAAA,mBAAmB,gCAAyBG,KAAzB,gBAAnB,GAAiED,UAAU,CAACE,QAA5E;AACAJ,IAAAA,mBAAmB,gCAAyBG,KAAzB,mBAAnB,GAAoED,UAAU,CAACG,WAAX,IAA0B,CAC5F,CAD4F,EAE5F,CAF4F,EAG5F,CAH4F,CAA9F;AAKD,GARD;AASAL,EAAAA,mBAAmB,CAACM,yBAApB,GAAgDR,WAAW,CAACS,MAA5D;AAEAR,EAAAA,iBAAiB,CAACE,OAAlB,CAA0B,UAACO,gBAAD,EAAmBL,KAAnB,EAA6B;AACrDH,IAAAA,mBAAmB,sCAA+BG,KAA/B,aAAnB,GAAoEZ,YAAY,CAC9EiB,gBAD8E,CAAhF;AAGAR,IAAAA,mBAAmB,sCAA+BG,KAA/B,iBAAnB,GACEK,gBAAgB,CAACC,SADnB;AAED,GAND;AAOAT,EAAAA,mBAAmB,CAACU,+BAApB,GAAsDX,iBAAiB,CAACQ,MAAxE;AAEA,SAAOP,mBAAP;AACD;;AAGD,SAASW,WAAT,GAAoD;AAAA,MAA/BC,IAA+B,uEAAxBvB,sBAAwB;;AAElD,MAAI,kBAAkBuB,IAAtB,EAA4B;AAAA,gBAC6BA,IAAI,CAACtB,YAAL,IAAqB,EADlD;AAAA,QACnBO,YADmB,SACnBA,YADmB;AAAA,QACLC,WADK,SACLA,WADK;AAAA,QACQC,iBADR,SACQA,iBADR;;AAE1B,QAAMc,SAAS,GACbhB,YAAY,IACXC,WAAW,IAAIA,WAAW,CAACS,MAAZ,GAAqB,CADrC,IAECR,iBAAiB,IAAIA,iBAAiB,CAACQ,MAAlB,GAA2B,CAHnD;;AAKA,QAAI,CAACM,SAAL,EAAgB;AACd,aAAO;AAACC,QAAAA,iBAAiB,EAAE;AAApB,OAAP;AACD;;AAED,WAAOC,MAAM,CAACC,MAAP,CACL,EADK,EAELpB,sBAAsB,CAAC;AAACC,MAAAA,YAAY,EAAZA,YAAD;AAAeC,MAAAA,WAAW,EAAXA,WAAf;AAA4BC,MAAAA,iBAAiB,EAAjBA;AAA5B,KAAD,CAFjB,EAGL;AACEe,MAAAA,iBAAiB,EAAE;AADrB,KAHK,CAAP;AAOD;;AAGD,MAAI,YAAYF,IAAhB,EAAsB;AACpB,QAAMtB,YAAY,GAAG;AAACQ,MAAAA,WAAW,EAAE,EAAd;AAAkBC,MAAAA,iBAAiB,EAAE;AAArC,KAArB;;AADoB,+CAGAa,IAAI,CAACK,MAAL,IAAe,EAHf;AAAA;;AAAA;AAGpB,0DAAuC;AAAA,YAA5BC,KAA4B;;AACrC,gBAAQA,KAAK,CAACC,IAAd;AACE,eAAK,SAAL;AAGE7B,YAAAA,YAAY,CAACO,YAAb,GAA4BqB,KAA5B;AACA;;AACF,eAAK,aAAL;AACE5B,YAAAA,YAAY,CAACS,iBAAb,CAA+BqB,IAA/B,CAAoCF,KAApC;AACA;;AACF,eAAK,OAAL;AACE5B,YAAAA,YAAY,CAACQ,WAAb,CAAyBsB,IAAzB,CAA8BF,KAA9B;AACA;;AACF;AAZF;AAgBD;AApBmB;AAAA;AAAA;AAAA;AAAA;;AAuBpB,WAAOP,WAAW,CAAC;AAACrB,MAAAA,YAAY,EAAZA;AAAD,KAAD,CAAlB;AACD;;AAED,SAAO,EAAP;AACD;;AAGM,IAAM2B,MAAM,GAAG;AACpBI,EAAAA,IAAI,EAAE,QADc;AAEpBC,EAAAA,EAAE,EAAEC,eAFgB;AAGpBC,EAAAA,EAAE,EAAED,eAHgB;AAIpBZ,EAAAA,WAAW,EAAXA,WAJoB;AAKpBc,EAAAA,OAAO,EAAE;AACPC,IAAAA,UAAU,EAAE;AADL;AALW,CAAf","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport lightingShader from './lights.glsl';\n\nconst INITIAL_MODULE_OPTIONS = {\n lightSources: {}\n};\n\n// Take color 0-255 and intensity as input and output 0.0-1.0 range\nfunction convertColor({color = [0, 0, 0], intensity = 1.0} = {}) {\n return color.map(component => (component * intensity) / 255.0);\n}\n\nfunction getLightSourceUniforms({ambientLight, pointLights = [], directionalLights = []}) {\n const lightSourceUniforms = {};\n\n if (ambientLight) {\n lightSourceUniforms['lighting_uAmbientLight.color'] = convertColor(ambientLight);\n } else {\n lightSourceUniforms['lighting_uAmbientLight.color'] = [0, 0, 0];\n }\n\n pointLights.forEach((pointLight, index) => {\n lightSourceUniforms[`lighting_uPointLight[${index}].color`] = convertColor(pointLight);\n lightSourceUniforms[`lighting_uPointLight[${index}].position`] = pointLight.position;\n lightSourceUniforms[`lighting_uPointLight[${index}].attenuation`] = pointLight.attenuation || [\n 1,\n 0,\n 0\n ];\n });\n lightSourceUniforms.lighting_uPointLightCount = pointLights.length;\n\n directionalLights.forEach((directionalLight, index) => {\n lightSourceUniforms[`lighting_uDirectionalLight[${index}].color`] = convertColor(\n directionalLight\n );\n lightSourceUniforms[`lighting_uDirectionalLight[${index}].direction`] =\n directionalLight.direction;\n });\n lightSourceUniforms.lighting_uDirectionalLightCount = directionalLights.length;\n\n return lightSourceUniforms;\n}\n\n// eslint-disable-next-line complexity\nfunction getUniforms(opts = INITIAL_MODULE_OPTIONS) {\n // Specify lights separately\n if ('lightSources' in opts) {\n const {ambientLight, pointLights, directionalLights} = opts.lightSources || {};\n const hasLights =\n ambientLight ||\n (pointLights && pointLights.length > 0) ||\n (directionalLights && directionalLights.length > 0);\n\n if (!hasLights) {\n return {lighting_uEnabled: false};\n }\n\n return Object.assign(\n {},\n getLightSourceUniforms({ambientLight, pointLights, directionalLights}),\n {\n lighting_uEnabled: true\n }\n );\n }\n\n // Support for array of lights. Type of light is detected by type field\n if ('lights' in opts) {\n const lightSources = {pointLights: [], directionalLights: []};\n // @ts-ignore\n for (const light of opts.lights || []) {\n switch (light.type) {\n case 'ambient':\n // Note: Only uses last ambient light\n // TODO - add ambient light sources on CPU?\n lightSources.ambientLight = light;\n break;\n case 'directional':\n lightSources.directionalLights.push(light);\n break;\n case 'point':\n lightSources.pointLights.push(light);\n break;\n default:\n // eslint-disable-next-line\n // console.warn(light.type);\n }\n }\n\n // Call the `opts.lightSources`` version\n return getUniforms({lightSources});\n }\n\n return {};\n}\n\n/** @type {ShaderModule} */\nexport const lights = {\n name: 'lights',\n vs: lightingShader,\n fs: lightingShader,\n getUniforms,\n defines: {\n MAX_LIGHTS: 3\n }\n};\n"],"file":"lights.js"}
1
+ {"version":3,"sources":["../../../../src/modules/lights/lights.js"],"names":["INITIAL_MODULE_OPTIONS","lightSources","convertColor","color","intensity","map","component","getLightSourceUniforms","ambientLight","pointLights","directionalLights","lightSourceUniforms","forEach","pointLight","index","position","attenuation","lighting_uPointLightCount","length","directionalLight","direction","lighting_uDirectionalLightCount","getUniforms","opts","hasLights","lighting_uEnabled","Object","assign","lights","light","type","push","name","vs","lightingShader","fs","defines","MAX_LIGHTS"],"mappings":"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","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport lightingShader from './lights.glsl';\n\nconst INITIAL_MODULE_OPTIONS = {\n lightSources: {}\n};\n\n// Take color 0-255 and intensity as input and output 0.0-1.0 range\nfunction convertColor({color = [0, 0, 0], intensity = 1.0} = {}) {\n return color.map(component => (component * intensity) / 255.0);\n}\n\nfunction getLightSourceUniforms({ambientLight, pointLights = [], directionalLights = []}) {\n const lightSourceUniforms = {};\n\n if (ambientLight) {\n lightSourceUniforms['lighting_uAmbientLight.color'] = convertColor(ambientLight);\n } else {\n lightSourceUniforms['lighting_uAmbientLight.color'] = [0, 0, 0];\n }\n\n pointLights.forEach((pointLight, index) => {\n lightSourceUniforms[`lighting_uPointLight[${index}].color`] = convertColor(pointLight);\n lightSourceUniforms[`lighting_uPointLight[${index}].position`] = pointLight.position;\n lightSourceUniforms[`lighting_uPointLight[${index}].attenuation`] = pointLight.attenuation || [\n 1,\n 0,\n 0\n ];\n });\n lightSourceUniforms.lighting_uPointLightCount = pointLights.length;\n\n directionalLights.forEach((directionalLight, index) => {\n lightSourceUniforms[`lighting_uDirectionalLight[${index}].color`] = convertColor(\n directionalLight\n );\n lightSourceUniforms[`lighting_uDirectionalLight[${index}].direction`] =\n directionalLight.direction;\n });\n lightSourceUniforms.lighting_uDirectionalLightCount = directionalLights.length;\n\n return lightSourceUniforms;\n}\n\n// eslint-disable-next-line complexity\nfunction getUniforms(opts = INITIAL_MODULE_OPTIONS) {\n // Specify lights separately\n if ('lightSources' in opts) {\n const {ambientLight, pointLights, directionalLights} = opts.lightSources || {};\n const hasLights =\n ambientLight ||\n (pointLights && pointLights.length > 0) ||\n (directionalLights && directionalLights.length > 0);\n\n if (!hasLights) {\n return {lighting_uEnabled: false};\n }\n\n return Object.assign(\n {},\n getLightSourceUniforms({ambientLight, pointLights, directionalLights}),\n {\n lighting_uEnabled: true\n }\n );\n }\n\n // Support for array of lights. Type of light is detected by type field\n if ('lights' in opts) {\n const lightSources = {pointLights: [], directionalLights: []};\n // @ts-ignore\n for (const light of opts.lights || []) {\n switch (light.type) {\n case 'ambient':\n // Note: Only uses last ambient light\n // TODO - add ambient light sources on CPU?\n lightSources.ambientLight = light;\n break;\n case 'directional':\n lightSources.directionalLights.push(light);\n break;\n case 'point':\n lightSources.pointLights.push(light);\n break;\n default:\n // eslint-disable-next-line\n // console.warn(light.type);\n }\n }\n\n // Call the `opts.lightSources`` version\n return getUniforms({lightSources});\n }\n\n return {};\n}\n\n/** @type {ShaderModule} */\nexport const lights = {\n name: 'lights',\n vs: lightingShader,\n fs: lightingShader,\n getUniforms,\n defines: {\n MAX_LIGHTS: 3\n }\n};\n"],"file":"lights.js"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.MODULE_INJECTORS_FS = exports.MODULE_INJECTORS_VS = void 0;
6
+ exports.MODULE_INJECTORS_VS = exports.MODULE_INJECTORS_FS = void 0;
7
7
  var MODULE_INJECTORS_VS = "#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n";
8
8
  exports.MODULE_INJECTORS_VS = MODULE_INJECTORS_VS;
9
9
  var MODULE_INJECTORS_FS = "#ifdef MODULE_MATERIAL\n gl_FragColor = material_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n gl_FragColor = lighting_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_FOG\n gl_FragColor = fog_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_PICKING\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth();\n#endif\n";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/phong-lighting/phong-lighting.js"],"names":["INITIAL_MODULE_OPTIONS","getMaterialUniforms","material","ambient","diffuse","shininess","specularColor","lighting_uAmbient","lighting_uDiffuse","lighting_uShininess","lighting_uSpecularColor","map","x","getUniforms","opts","lighting_uEnabled","gouraudLighting","name","dependencies","lights","vs","lightingShader","defines","LIGHTING_VERTEX","phongLighting","fs","LIGHTING_FRAGMENT"],"mappings":";;;;;;;;;AAEA;;AACA;;AAEA,IAAMA,sBAAsB,GAAG,EAA/B;;AAEA,SAASC,mBAAT,CAA6BC,QAA7B,EAAuC;AAAA,0BACiDA,QADjD,CAC9BC,OAD8B;AAAA,MAC9BA,OAD8B,kCACpB,IADoB;AAAA,0BACiDD,QADjD,CACdE,OADc;AAAA,MACdA,OADc,kCACJ,GADI;AAAA,4BACiDF,QADjD,CACCG,SADD;AAAA,MACCA,SADD,oCACa,EADb;AAAA,8BACiDH,QADjD,CACiBI,aADjB;AAAA,MACiBA,aADjB,sCACiC,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,CADjC;AAGrC,SAAO;AACLC,IAAAA,iBAAiB,EAAEJ,OADd;AAELK,IAAAA,iBAAiB,EAAEJ,OAFd;AAGLK,IAAAA,mBAAmB,EAAEJ,SAHhB;AAILK,IAAAA,uBAAuB,EAAEJ,aAAa,CAACK,GAAd,CAAkB,UAAAC,CAAC;AAAA,aAAIA,CAAC,GAAG,GAAR;AAAA,KAAnB;AAJpB,GAAP;AAMD;;AAED,SAASC,WAAT,GAAoD;AAAA,MAA/BC,IAA+B,uEAAxBd,sBAAwB;;AAClD,MAAI,EAAE,cAAcc,IAAhB,CAAJ,EAA2B;AACzB,WAAO,EAAP;AACD;;AAHiD,MAK3CZ,QAL2C,GAK/BY,IAL+B,CAK3CZ,QAL2C;;AAOlD,MAAI,CAACA,QAAL,EAAe;AACb,WAAO;AAACa,MAAAA,iBAAiB,EAAE;AAApB,KAAP;AACD;;AAED,SAAOd,mBAAmB,CAACC,QAAD,CAA1B;AACD;;AAGM,IAAMc,eAAe,GAAG;AAC7BC,EAAAA,IAAI,EAAE,kBADuB;AAE7BC,EAAAA,YAAY,EAAE,CAACC,cAAD,CAFe;AAG7BC,EAAAA,EAAE,EAAEC,sBAHyB;AAI7BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,eAAe,EAAE;AADV,GAJoB;AAO7BV,EAAAA,WAAW,EAAXA;AAP6B,CAAxB;;AAWA,IAAMW,aAAa,GAAG;AAC3BP,EAAAA,IAAI,EAAE,gBADqB;AAE3BC,EAAAA,YAAY,EAAE,CAACC,cAAD,CAFa;AAG3BM,EAAAA,EAAE,EAAEJ,sBAHuB;AAI3BC,EAAAA,OAAO,EAAE;AACPI,IAAAA,iBAAiB,EAAE;AADZ,GAJkB;AAO3Bb,EAAAA,WAAW,EAAXA;AAP2B,CAAtB","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport {lights} from '../lights/lights';\nimport lightingShader from './phong-lighting.glsl';\n\nconst INITIAL_MODULE_OPTIONS = {};\n\nfunction getMaterialUniforms(material) {\n const {ambient = 0.35, diffuse = 0.6, shininess = 32, specularColor = [30, 30, 30]} = material;\n\n return {\n lighting_uAmbient: ambient,\n lighting_uDiffuse: diffuse,\n lighting_uShininess: shininess,\n lighting_uSpecularColor: specularColor.map(x => x / 255)\n };\n}\n\nfunction getUniforms(opts = INITIAL_MODULE_OPTIONS) {\n if (!('material' in opts)) {\n return {};\n }\n\n const {material} = opts;\n\n if (!material) {\n return {lighting_uEnabled: false};\n }\n\n return getMaterialUniforms(material);\n}\n\n/** @type {ShaderModule} */\nexport const gouraudLighting = {\n name: 'gouraud-lighting',\n dependencies: [lights],\n vs: lightingShader,\n defines: {\n LIGHTING_VERTEX: 1\n },\n getUniforms\n};\n\n/** @type {ShaderModule} */\nexport const phongLighting = {\n name: 'phong-lighting',\n dependencies: [lights],\n fs: lightingShader,\n defines: {\n LIGHTING_FRAGMENT: 1\n },\n getUniforms\n};\n"],"file":"phong-lighting.js"}
1
+ {"version":3,"sources":["../../../../src/modules/phong-lighting/phong-lighting.js"],"names":["INITIAL_MODULE_OPTIONS","getMaterialUniforms","material","ambient","diffuse","shininess","specularColor","lighting_uAmbient","lighting_uDiffuse","lighting_uShininess","lighting_uSpecularColor","map","x","getUniforms","opts","lighting_uEnabled","gouraudLighting","name","dependencies","lights","vs","lightingShader","defines","LIGHTING_VERTEX","phongLighting","fs","LIGHTING_FRAGMENT"],"mappings":";;;;;;;;;AAEA;;AACA;;AAEA,IAAMA,sBAAsB,GAAG,EAA/B;;AAEA,SAASC,mBAAT,CAA6BC,QAA7B,EAAuC;AACrC,0BAAsFA,QAAtF,CAAOC,OAAP;AAAA,MAAOA,OAAP,kCAAiB,IAAjB;AAAA,0BAAsFD,QAAtF,CAAuBE,OAAvB;AAAA,MAAuBA,OAAvB,kCAAiC,GAAjC;AAAA,4BAAsFF,QAAtF,CAAsCG,SAAtC;AAAA,MAAsCA,SAAtC,oCAAkD,EAAlD;AAAA,8BAAsFH,QAAtF,CAAsDI,aAAtD;AAAA,MAAsDA,aAAtD,sCAAsE,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,CAAtE;AAEA,SAAO;AACLC,IAAAA,iBAAiB,EAAEJ,OADd;AAELK,IAAAA,iBAAiB,EAAEJ,OAFd;AAGLK,IAAAA,mBAAmB,EAAEJ,SAHhB;AAILK,IAAAA,uBAAuB,EAAEJ,aAAa,CAACK,GAAd,CAAkB,UAAAC,CAAC;AAAA,aAAIA,CAAC,GAAG,GAAR;AAAA,KAAnB;AAJpB,GAAP;AAMD;;AAED,SAASC,WAAT,GAAoD;AAAA,MAA/BC,IAA+B,uEAAxBd,sBAAwB;;AAClD,MAAI,EAAE,cAAcc,IAAhB,CAAJ,EAA2B;AACzB,WAAO,EAAP;AACD;;AAED,MAAOZ,QAAP,GAAmBY,IAAnB,CAAOZ,QAAP;;AAEA,MAAI,CAACA,QAAL,EAAe;AACb,WAAO;AAACa,MAAAA,iBAAiB,EAAE;AAApB,KAAP;AACD;;AAED,SAAOd,mBAAmB,CAACC,QAAD,CAA1B;AACD;;AAGM,IAAMc,eAAe,GAAG;AAC7BC,EAAAA,IAAI,EAAE,kBADuB;AAE7BC,EAAAA,YAAY,EAAE,CAACC,cAAD,CAFe;AAG7BC,EAAAA,EAAE,EAAEC,sBAHyB;AAI7BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,eAAe,EAAE;AADV,GAJoB;AAO7BV,EAAAA,WAAW,EAAXA;AAP6B,CAAxB;;AAWA,IAAMW,aAAa,GAAG;AAC3BP,EAAAA,IAAI,EAAE,gBADqB;AAE3BC,EAAAA,YAAY,EAAE,CAACC,cAAD,CAFa;AAG3BM,EAAAA,EAAE,EAAEJ,sBAHuB;AAI3BC,EAAAA,OAAO,EAAE;AACPI,IAAAA,iBAAiB,EAAE;AADZ,GAJkB;AAO3Bb,EAAAA,WAAW,EAAXA;AAP2B,CAAtB","sourcesContent":["/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport {lights} from '../lights/lights';\nimport lightingShader from './phong-lighting.glsl';\n\nconst INITIAL_MODULE_OPTIONS = {};\n\nfunction getMaterialUniforms(material) {\n const {ambient = 0.35, diffuse = 0.6, shininess = 32, specularColor = [30, 30, 30]} = material;\n\n return {\n lighting_uAmbient: ambient,\n lighting_uDiffuse: diffuse,\n lighting_uShininess: shininess,\n lighting_uSpecularColor: specularColor.map(x => x / 255)\n };\n}\n\nfunction getUniforms(opts = INITIAL_MODULE_OPTIONS) {\n if (!('material' in opts)) {\n return {};\n }\n\n const {material} = opts;\n\n if (!material) {\n return {lighting_uEnabled: false};\n }\n\n return getMaterialUniforms(material);\n}\n\n/** @type {ShaderModule} */\nexport const gouraudLighting = {\n name: 'gouraud-lighting',\n dependencies: [lights],\n vs: lightingShader,\n defines: {\n LIGHTING_VERTEX: 1\n },\n getUniforms\n};\n\n/** @type {ShaderModule} */\nexport const phongLighting = {\n name: 'phong-lighting',\n dependencies: [lights],\n fs: lightingShader,\n defines: {\n LIGHTING_FRAGMENT: 1\n },\n getUniforms\n};\n"],"file":"phong-lighting.js"}
@@ -5,11 +5,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getQualifierDetails = getQualifierDetails;
8
+ exports.convertToVec4 = convertToVec4;
9
9
  exports.getPassthroughFS = getPassthroughFS;
10
- exports.typeToChannelSuffix = typeToChannelSuffix;
10
+ exports.getQualifierDetails = getQualifierDetails;
11
11
  exports.typeToChannelCount = typeToChannelCount;
12
- exports.convertToVec4 = convertToVec4;
12
+ exports.typeToChannelSuffix = typeToChannelSuffix;
13
13
 
14
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/shader-utils.js"],"names":["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"}
1
+ {"version":3,"sources":["../../../src/utils/shader-utils.js"],"names":["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"}
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getContextInfo = getContextInfo;
8
+ exports.FEATURES = void 0;
9
9
  exports.canCompileGLGSExtension = canCompileGLGSExtension;
10
+ exports.getContextInfo = getContextInfo;
10
11
  exports.hasFeatures = hasFeatures;
11
- exports.FEATURES = void 0;
12
12
 
13
13
  var _isOldIe = _interopRequireDefault(require("./is-old-ie"));
14
14
 
@@ -4,15 +4,12 @@ import { getPlatformShaderDefines, getVersionDefines } from './platform-defines'
4
4
  import injectShader, { DECLARATION_INJECT_MARKER } from './inject-shader';
5
5
  import transpileShader from './transpile-shader';
6
6
  import { assert } from '../utils';
7
- const INJECT_SHADER_DECLARATIONS = `\n\n${DECLARATION_INJECT_MARKER}\n\n`;
7
+ const INJECT_SHADER_DECLARATIONS = "\n\n".concat(DECLARATION_INJECT_MARKER, "\n\n");
8
8
  const SHADER_TYPE = {
9
9
  [VERTEX_SHADER]: 'vertex',
10
10
  [FRAGMENT_SHADER]: 'fragment'
11
11
  };
12
- const FRAGMENT_SHADER_PROLOGUE = `\
13
- precision highp float;
14
-
15
- `;
12
+ const FRAGMENT_SHADER_PROLOGUE = "precision highp float;\n\n";
16
13
  export function assembleShaders(gl, opts) {
17
14
  const {
18
15
  vs,
@@ -35,18 +32,19 @@ export function assembleShaders(gl, opts) {
35
32
  };
36
33
  }
37
34
 
38
- function assembleShader(gl, {
39
- id,
40
- source,
41
- type,
42
- modules,
43
- defines = {},
44
- hookFunctions = [],
45
- inject = {},
46
- transpileToGLSL100 = false,
47
- prologue = true,
48
- log
49
- }) {
35
+ function assembleShader(gl, _ref) {
36
+ let {
37
+ id,
38
+ source,
39
+ type,
40
+ modules,
41
+ defines = {},
42
+ hookFunctions = [],
43
+ inject = {},
44
+ transpileToGLSL100 = false,
45
+ prologue = true,
46
+ log
47
+ } = _ref;
50
48
  assert(typeof source === 'string', 'shader source must be a string');
51
49
  const isVertex = type === VERTEX_SHADER;
52
50
  const sourceLines = source.split('\n');
@@ -59,7 +57,7 @@ function assembleShader(gl, {
59
57
  versionLine = sourceLines[0];
60
58
  coreSource = sourceLines.slice(1).join('\n');
61
59
  } else {
62
- versionLine = `#version ${glslVersion}`;
60
+ versionLine = "#version ".concat(glslVersion);
63
61
  }
64
62
 
65
63
  const allDefines = {};
@@ -67,22 +65,13 @@ function assembleShader(gl, {
67
65
  Object.assign(allDefines, module.getDefines());
68
66
  });
69
67
  Object.assign(allDefines, defines);
70
- let assembledSource = prologue ? `\
71
- ${versionLine}
72
- ${getShaderName({
68
+ let assembledSource = prologue ? "".concat(versionLine, "\n").concat(getShaderName({
73
69
  id,
74
70
  source,
75
71
  type
76
- })}
77
- ${getShaderType({
72
+ }), "\n").concat(getShaderType({
78
73
  type
79
- })}
80
- ${getPlatformShaderDefines(gl)}
81
- ${getVersionDefines(gl, glslVersion, !isVertex)}
82
- ${getApplicationDefines(allDefines)}
83
- ${isVertex ? '' : FRAGMENT_SHADER_PROLOGUE}
84
- ` : `${versionLine}
85
- `;
74
+ }), "\n").concat(getPlatformShaderDefines(gl), "\n").concat(getVersionDefines(gl, glslVersion, !isVertex), "\n").concat(getApplicationDefines(allDefines), "\n").concat(isVertex ? '' : FRAGMENT_SHADER_PROLOGUE, "\n") : "".concat(versionLine, "\n");
86
75
  const hookFunctionMap = normalizeHookFunctions(hookFunctions);
87
76
  const hookInjections = {};
88
77
  const declInjections = {};
@@ -159,27 +148,25 @@ function assembleGetUniforms(modules) {
159
148
  };
160
149
  }
161
150
 
162
- function getShaderType({
163
- type
164
- }) {
165
- return `
166
- #define SHADER_TYPE_${SHADER_TYPE[type].toUpperCase()}
167
- `;
151
+ function getShaderType(_ref2) {
152
+ let {
153
+ type
154
+ } = _ref2;
155
+ return "\n#define SHADER_TYPE_".concat(SHADER_TYPE[type].toUpperCase(), "\n");
168
156
  }
169
157
 
170
- function getShaderName({
171
- id,
172
- source,
173
- type
174
- }) {
158
+ function getShaderName(_ref3) {
159
+ let {
160
+ id,
161
+ source,
162
+ type
163
+ } = _ref3;
175
164
  const injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;
176
- return injectShaderName ? `
177
- #define SHADER_NAME ${id}_${SHADER_TYPE[type]}
178
-
179
- ` : '';
165
+ return injectShaderName ? "\n#define SHADER_NAME ".concat(id, "_").concat(SHADER_TYPE[type], "\n\n") : '';
180
166
  }
181
167
 
182
- function getApplicationDefines(defines = {}) {
168
+ function getApplicationDefines() {
169
+ let defines = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
183
170
  let count = 0;
184
171
  let sourceText = '';
185
172
 
@@ -192,7 +179,7 @@ function getApplicationDefines(defines = {}) {
192
179
  const value = defines[define];
193
180
 
194
181
  if (value || Number.isFinite(value)) {
195
- sourceText += `#define ${define.toUpperCase()} ${defines[define]}\n`;
182
+ sourceText += "#define ".concat(define.toUpperCase(), " ").concat(defines[define], "\n");
196
183
  }
197
184
  }
198
185
 
@@ -208,10 +195,10 @@ function getHookFunctions(hookFunctions, hookInjections) {
208
195
 
209
196
  for (const hookName in hookFunctions) {
210
197
  const hookFunction = hookFunctions[hookName];
211
- result += `void ${hookFunction.signature} {\n`;
198
+ result += "void ".concat(hookFunction.signature, " {\n");
212
199
 
213
200
  if (hookFunction.header) {
214
- result += ` ${hookFunction.header}`;
201
+ result += " ".concat(hookFunction.header);
215
202
  }
216
203
 
217
204
  if (hookInjections[hookName]) {
@@ -219,12 +206,12 @@ function getHookFunctions(hookFunctions, hookInjections) {
219
206
  injections.sort((a, b) => a.order - b.order);
220
207
 
221
208
  for (const injection of injections) {
222
- result += ` ${injection.injection}\n`;
209
+ result += " ".concat(injection.injection, "\n");
223
210
  }
224
211
  }
225
212
 
226
213
  if (hookFunction.footer) {
227
- result += ` ${hookFunction.footer}`;
214
+ result += " ".concat(hookFunction.footer);
228
215
  }
229
216
 
230
217
  result += '}\n';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/assemble-shaders.js"],"names":["VERTEX_SHADER","FRAGMENT_SHADER","resolveModules","getPlatformShaderDefines","getVersionDefines","injectShader","DECLARATION_INJECT_MARKER","transpileShader","assert","INJECT_SHADER_DECLARATIONS","SHADER_TYPE","FRAGMENT_SHADER_PROLOGUE","assembleShaders","gl","opts","vs","fs","modules","assembleShader","Object","assign","source","type","getUniforms","assembleGetUniforms","id","defines","hookFunctions","inject","transpileToGLSL100","prologue","log","isVertex","sourceLines","split","glslVersion","versionLine","coreSource","indexOf","slice","join","allDefines","forEach","module","getDefines","assembledSource","getShaderName","getShaderType","getApplicationDefines","hookFunctionMap","normalizeHookFunctions","hookInjections","declInjections","mainInjections","key","injection","order","match","hash","name","checkDeprecations","moduleSource","getModuleSource","injections","injectionType","push","getHookFunctions","uniforms","moduleUniforms","toUpperCase","injectShaderName","count","sourceText","define","value","Number","isFinite","result","hookName","hookFunction","signature","header","sort","a","b","footer","hook","trim","stage","replace"],"mappings":"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","sourcesContent":["import {VERTEX_SHADER, FRAGMENT_SHADER} from './constants';\nimport {resolveModules} from './resolve-modules';\nimport {getPlatformShaderDefines, getVersionDefines} from './platform-defines';\nimport injectShader, {DECLARATION_INJECT_MARKER} from './inject-shader';\nimport transpileShader from './transpile-shader';\nimport {assert} from '../utils';\n\nconst INJECT_SHADER_DECLARATIONS = `\\n\\n${DECLARATION_INJECT_MARKER}\\n\\n`;\n\nconst SHADER_TYPE = {\n [VERTEX_SHADER]: 'vertex',\n [FRAGMENT_SHADER]: 'fragment'\n};\n\n// Precision prologue to inject before functions are injected in shader\n// TODO - extract any existing prologue in the fragment source and move it up...\nconst FRAGMENT_SHADER_PROLOGUE = `\\\nprecision highp float;\n\n`;\n\n// Inject a list of modules\nexport function assembleShaders(gl, opts) {\n const {vs, fs} = opts;\n const modules = resolveModules(opts.modules || []);\n return {\n gl,\n vs: assembleShader(gl, Object.assign({}, opts, {source: vs, type: VERTEX_SHADER, modules})),\n fs: assembleShader(gl, Object.assign({}, opts, {source: fs, type: FRAGMENT_SHADER, modules})),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n\n// Pulls together complete source code for either a vertex or a fragment shader\n// adding prologues, requested module chunks, and any final injections.\nfunction assembleShader(\n gl,\n {\n id,\n source,\n type,\n modules,\n defines = {},\n hookFunctions = [],\n inject = {},\n transpileToGLSL100 = false,\n prologue = true,\n log\n }\n) {\n assert(typeof source === 'string', 'shader source must be a string');\n\n const isVertex = type === VERTEX_SHADER;\n\n const sourceLines = source.split('\\n');\n let glslVersion = 100;\n let versionLine = '';\n let coreSource = source;\n // Extract any version directive string from source.\n // TODO : keep all pre-processor statements at the begining of the shader.\n if (sourceLines[0].indexOf('#version ') === 0) {\n glslVersion = 300; // TODO - regexp that matches actual version number\n versionLine = sourceLines[0];\n coreSource = sourceLines.slice(1).join('\\n');\n } else {\n versionLine = `#version ${glslVersion}`;\n }\n\n // Combine Module and Application Defines\n const allDefines = {};\n modules.forEach(module => {\n Object.assign(allDefines, module.getDefines());\n });\n Object.assign(allDefines, defines);\n\n // Add platform defines (use these to work around platform-specific bugs and limitations)\n // Add common defines (GLSL version compatibility, feature detection)\n // Add precision declaration for fragment shaders\n let assembledSource = prologue\n ? `\\\n${versionLine}\n${getShaderName({id, source, type})}\n${getShaderType({type})}\n${getPlatformShaderDefines(gl)}\n${getVersionDefines(gl, glslVersion, !isVertex)}\n${getApplicationDefines(allDefines)}\n${isVertex ? '' : FRAGMENT_SHADER_PROLOGUE}\n`\n : `${versionLine}\n`;\n\n const hookFunctionMap = normalizeHookFunctions(hookFunctions);\n\n // Add source of dependent modules in resolved order\n const hookInjections = {};\n const declInjections = {};\n const mainInjections = {};\n\n for (const key in inject) {\n const injection =\n typeof inject[key] === 'string' ? {injection: inject[key], order: 0} : inject[key];\n const match = key.match(/^(v|f)s:(#)?([\\w-]+)$/);\n if (match) {\n const hash = match[2];\n const name = match[3];\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n } else {\n mainInjections[key] = [injection];\n }\n } else {\n hookInjections[key] = [injection];\n }\n } else {\n // Regex injection\n mainInjections[key] = [injection];\n }\n }\n\n for (const module of modules) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n const moduleSource = module.getModuleSource(type, glslVersion);\n // Add the module source, and a #define that declares it presence\n assembledSource += moduleSource;\n\n const injections = module.injections[type];\n for (const key in injections) {\n const match = key.match(/^(v|f)s:#([\\w-]+)$/);\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n } else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n\n // For injectShader\n assembledSource += INJECT_SHADER_DECLARATIONS;\n\n assembledSource = injectShader(assembledSource, type, declInjections);\n\n assembledSource += getHookFunctions(hookFunctionMap[type], hookInjections);\n\n // Add the version directive and actual source of this shader\n assembledSource += coreSource;\n\n // Apply any requested shader injections\n assembledSource = injectShader(assembledSource, type, mainInjections);\n\n assembledSource = transpileShader(\n assembledSource,\n transpileToGLSL100 ? 100 : glslVersion,\n isVertex\n );\n\n return assembledSource;\n}\n\n// Returns a combined `getUniforms` covering the options for all the modules,\n// the created function will pass on options to the inidividual `getUniforms`\n// function of each shader module and combine the results into one object that\n// can be passed to setUniforms.\nfunction assembleGetUniforms(modules) {\n return function getUniforms(opts) {\n const uniforms = {};\n for (const module of modules) {\n // `modules` is already sorted by dependency level. This guarantees that\n // modules have access to the uniforms that are generated by their dependencies.\n const moduleUniforms = module.getUniforms(opts, uniforms);\n Object.assign(uniforms, moduleUniforms);\n }\n return uniforms;\n };\n}\n\nfunction getShaderType({type}) {\n return `\n#define SHADER_TYPE_${SHADER_TYPE[type].toUpperCase()}\n`;\n}\n\n// Generate \"glslify-compatible\" SHADER_NAME defines\n// These are understood by the GLSL error parsing function\n// If id is provided and no SHADER_NAME constant is present in source, create one\nfunction getShaderName({id, source, type}) {\n const injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;\n return injectShaderName\n ? `\n#define SHADER_NAME ${id}_${SHADER_TYPE[type]}\n\n`\n : '';\n}\n\n// Generates application defines from an object\nfunction getApplicationDefines(defines = {}) {\n let count = 0;\n let sourceText = '';\n for (const define in defines) {\n if (count === 0) {\n sourceText += '\\n// APPLICATION DEFINES\\n';\n }\n count++;\n\n const value = defines[define];\n if (value || Number.isFinite(value)) {\n sourceText += `#define ${define.toUpperCase()} ${defines[define]}\\n`;\n }\n }\n if (count === 0) {\n sourceText += '\\n';\n }\n return sourceText;\n}\n\nfunction getHookFunctions(hookFunctions, hookInjections) {\n let result = '';\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += `void ${hookFunction.signature} {\\n`;\n if (hookFunction.header) {\n result += ` ${hookFunction.header}`;\n }\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a, b) => a.order - b.order);\n for (const injection of injections) {\n result += ` ${injection.injection}\\n`;\n }\n }\n if (hookFunction.footer) {\n result += ` ${hookFunction.footer}`;\n }\n result += '}\\n';\n }\n\n return result;\n}\n\nfunction normalizeHookFunctions(hookFunctions) {\n const result = {\n vs: {},\n fs: {}\n };\n\n hookFunctions.forEach(hook => {\n let opts;\n if (typeof hook !== 'string') {\n opts = hook;\n hook = opts.hook;\n } else {\n opts = {};\n }\n hook = hook.trim();\n const [stage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n result[stage][name] = Object.assign(opts, {signature});\n });\n\n return result;\n}\n"],"file":"assemble-shaders.js"}
1
+ {"version":3,"sources":["../../../src/lib/assemble-shaders.js"],"names":["VERTEX_SHADER","FRAGMENT_SHADER","resolveModules","getPlatformShaderDefines","getVersionDefines","injectShader","DECLARATION_INJECT_MARKER","transpileShader","assert","INJECT_SHADER_DECLARATIONS","SHADER_TYPE","FRAGMENT_SHADER_PROLOGUE","assembleShaders","gl","opts","vs","fs","modules","assembleShader","Object","assign","source","type","getUniforms","assembleGetUniforms","id","defines","hookFunctions","inject","transpileToGLSL100","prologue","log","isVertex","sourceLines","split","glslVersion","versionLine","coreSource","indexOf","slice","join","allDefines","forEach","module","getDefines","assembledSource","getShaderName","getShaderType","getApplicationDefines","hookFunctionMap","normalizeHookFunctions","hookInjections","declInjections","mainInjections","key","injection","order","match","hash","name","checkDeprecations","moduleSource","getModuleSource","injections","injectionType","push","getHookFunctions","uniforms","moduleUniforms","toUpperCase","injectShaderName","count","sourceText","define","value","Number","isFinite","result","hookName","hookFunction","signature","header","sort","a","b","footer","hook","trim","stage","replace"],"mappings":"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","sourcesContent":["import {VERTEX_SHADER, FRAGMENT_SHADER} from './constants';\nimport {resolveModules} from './resolve-modules';\nimport {getPlatformShaderDefines, getVersionDefines} from './platform-defines';\nimport injectShader, {DECLARATION_INJECT_MARKER} from './inject-shader';\nimport transpileShader from './transpile-shader';\nimport {assert} from '../utils';\n\nconst INJECT_SHADER_DECLARATIONS = `\\n\\n${DECLARATION_INJECT_MARKER}\\n\\n`;\n\nconst SHADER_TYPE = {\n [VERTEX_SHADER]: 'vertex',\n [FRAGMENT_SHADER]: 'fragment'\n};\n\n// Precision prologue to inject before functions are injected in shader\n// TODO - extract any existing prologue in the fragment source and move it up...\nconst FRAGMENT_SHADER_PROLOGUE = `\\\nprecision highp float;\n\n`;\n\n// Inject a list of modules\nexport function assembleShaders(gl, opts) {\n const {vs, fs} = opts;\n const modules = resolveModules(opts.modules || []);\n return {\n gl,\n vs: assembleShader(gl, Object.assign({}, opts, {source: vs, type: VERTEX_SHADER, modules})),\n fs: assembleShader(gl, Object.assign({}, opts, {source: fs, type: FRAGMENT_SHADER, modules})),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n\n// Pulls together complete source code for either a vertex or a fragment shader\n// adding prologues, requested module chunks, and any final injections.\nfunction assembleShader(\n gl,\n {\n id,\n source,\n type,\n modules,\n defines = {},\n hookFunctions = [],\n inject = {},\n transpileToGLSL100 = false,\n prologue = true,\n log\n }\n) {\n assert(typeof source === 'string', 'shader source must be a string');\n\n const isVertex = type === VERTEX_SHADER;\n\n const sourceLines = source.split('\\n');\n let glslVersion = 100;\n let versionLine = '';\n let coreSource = source;\n // Extract any version directive string from source.\n // TODO : keep all pre-processor statements at the begining of the shader.\n if (sourceLines[0].indexOf('#version ') === 0) {\n glslVersion = 300; // TODO - regexp that matches actual version number\n versionLine = sourceLines[0];\n coreSource = sourceLines.slice(1).join('\\n');\n } else {\n versionLine = `#version ${glslVersion}`;\n }\n\n // Combine Module and Application Defines\n const allDefines = {};\n modules.forEach(module => {\n Object.assign(allDefines, module.getDefines());\n });\n Object.assign(allDefines, defines);\n\n // Add platform defines (use these to work around platform-specific bugs and limitations)\n // Add common defines (GLSL version compatibility, feature detection)\n // Add precision declaration for fragment shaders\n let assembledSource = prologue\n ? `\\\n${versionLine}\n${getShaderName({id, source, type})}\n${getShaderType({type})}\n${getPlatformShaderDefines(gl)}\n${getVersionDefines(gl, glslVersion, !isVertex)}\n${getApplicationDefines(allDefines)}\n${isVertex ? '' : FRAGMENT_SHADER_PROLOGUE}\n`\n : `${versionLine}\n`;\n\n const hookFunctionMap = normalizeHookFunctions(hookFunctions);\n\n // Add source of dependent modules in resolved order\n const hookInjections = {};\n const declInjections = {};\n const mainInjections = {};\n\n for (const key in inject) {\n const injection =\n typeof inject[key] === 'string' ? {injection: inject[key], order: 0} : inject[key];\n const match = key.match(/^(v|f)s:(#)?([\\w-]+)$/);\n if (match) {\n const hash = match[2];\n const name = match[3];\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n } else {\n mainInjections[key] = [injection];\n }\n } else {\n hookInjections[key] = [injection];\n }\n } else {\n // Regex injection\n mainInjections[key] = [injection];\n }\n }\n\n for (const module of modules) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n const moduleSource = module.getModuleSource(type, glslVersion);\n // Add the module source, and a #define that declares it presence\n assembledSource += moduleSource;\n\n const injections = module.injections[type];\n for (const key in injections) {\n const match = key.match(/^(v|f)s:#([\\w-]+)$/);\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n } else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n\n // For injectShader\n assembledSource += INJECT_SHADER_DECLARATIONS;\n\n assembledSource = injectShader(assembledSource, type, declInjections);\n\n assembledSource += getHookFunctions(hookFunctionMap[type], hookInjections);\n\n // Add the version directive and actual source of this shader\n assembledSource += coreSource;\n\n // Apply any requested shader injections\n assembledSource = injectShader(assembledSource, type, mainInjections);\n\n assembledSource = transpileShader(\n assembledSource,\n transpileToGLSL100 ? 100 : glslVersion,\n isVertex\n );\n\n return assembledSource;\n}\n\n// Returns a combined `getUniforms` covering the options for all the modules,\n// the created function will pass on options to the inidividual `getUniforms`\n// function of each shader module and combine the results into one object that\n// can be passed to setUniforms.\nfunction assembleGetUniforms(modules) {\n return function getUniforms(opts) {\n const uniforms = {};\n for (const module of modules) {\n // `modules` is already sorted by dependency level. This guarantees that\n // modules have access to the uniforms that are generated by their dependencies.\n const moduleUniforms = module.getUniforms(opts, uniforms);\n Object.assign(uniforms, moduleUniforms);\n }\n return uniforms;\n };\n}\n\nfunction getShaderType({type}) {\n return `\n#define SHADER_TYPE_${SHADER_TYPE[type].toUpperCase()}\n`;\n}\n\n// Generate \"glslify-compatible\" SHADER_NAME defines\n// These are understood by the GLSL error parsing function\n// If id is provided and no SHADER_NAME constant is present in source, create one\nfunction getShaderName({id, source, type}) {\n const injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;\n return injectShaderName\n ? `\n#define SHADER_NAME ${id}_${SHADER_TYPE[type]}\n\n`\n : '';\n}\n\n// Generates application defines from an object\nfunction getApplicationDefines(defines = {}) {\n let count = 0;\n let sourceText = '';\n for (const define in defines) {\n if (count === 0) {\n sourceText += '\\n// APPLICATION DEFINES\\n';\n }\n count++;\n\n const value = defines[define];\n if (value || Number.isFinite(value)) {\n sourceText += `#define ${define.toUpperCase()} ${defines[define]}\\n`;\n }\n }\n if (count === 0) {\n sourceText += '\\n';\n }\n return sourceText;\n}\n\nfunction getHookFunctions(hookFunctions, hookInjections) {\n let result = '';\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += `void ${hookFunction.signature} {\\n`;\n if (hookFunction.header) {\n result += ` ${hookFunction.header}`;\n }\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a, b) => a.order - b.order);\n for (const injection of injections) {\n result += ` ${injection.injection}\\n`;\n }\n }\n if (hookFunction.footer) {\n result += ` ${hookFunction.footer}`;\n }\n result += '}\\n';\n }\n\n return result;\n}\n\nfunction normalizeHookFunctions(hookFunctions) {\n const result = {\n vs: {},\n fs: {}\n };\n\n hookFunctions.forEach(hook => {\n let opts;\n if (typeof hook !== 'string') {\n opts = hook;\n hook = opts.hook;\n } else {\n opts = {};\n }\n hook = hook.trim();\n const [stage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n result[stage][name] = Object.assign(opts, {signature});\n });\n\n return result;\n}\n"],"file":"assemble-shaders.js"}
@@ -9,7 +9,8 @@ export const DECLARATION_INJECT_MARKER = '__LUMA_INJECT_DECLARATIONS__';
9
9
  const REGEX_START_OF_MAIN = /void\s+main\s*\([^)]*\)\s*\{\n?/;
10
10
  const REGEX_END_OF_MAIN = /}\n?[^{}]*$/;
11
11
  const fragments = [];
12
- export default function injectShader(source, type, inject, injectStandardStubs = false) {
12
+ export default function injectShader(source, type, inject) {
13
+ let injectStandardStubs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
13
14
  const isVertex = type === VERTEX_SHADER;
14
15
 
15
16
  for (const key in inject) {
@@ -21,7 +22,7 @@ export default function injectShader(source, type, inject, injectStandardStubs =
21
22
  fragments[i] = fragmentData[i].injection;
22
23
  }
23
24
 
24
- const fragmentString = `${fragments.join('\n')}\n`;
25
+ const fragmentString = "".concat(fragments.join('\n'), "\n");
25
26
 
26
27
  switch (key) {
27
28
  case 'vs:#decl':
@@ -84,7 +85,7 @@ export function combineInjects(injects) {
84
85
  assert(Array.isArray(injects) && injects.length > 1);
85
86
  injects.forEach(inject => {
86
87
  for (const key in inject) {
87
- result[key] = result[key] ? `${result[key]}\n${inject[key]}` : inject[key];
88
+ result[key] = result[key] ? "".concat(result[key], "\n").concat(inject[key]) : inject[key];
88
89
  }
89
90
  });
90
91
  return result;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/inject-shader.js"],"names":["MODULE_INJECTORS_VS","MODULE_INJECTORS_FS","VERTEX_SHADER","FRAGMENT_SHADER","assert","MODULE_INJECTORS","DECLARATION_INJECT_MARKER","REGEX_START_OF_MAIN","REGEX_END_OF_MAIN","fragments","injectShader","source","type","inject","injectStandardStubs","isVertex","key","fragmentData","sort","a","b","order","length","i","len","injection","fragmentString","join","replace","match","combineInjects","injects","result","Array","isArray","forEach"],"mappings":"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","sourcesContent":["import {MODULE_INJECTORS_VS, MODULE_INJECTORS_FS} from '../modules/module-injectors';\nimport {VERTEX_SHADER, FRAGMENT_SHADER} from './constants';\nimport {assert} from '../utils';\n\n// TODO - experimental\nconst MODULE_INJECTORS = {\n [VERTEX_SHADER]: MODULE_INJECTORS_VS,\n [FRAGMENT_SHADER]: MODULE_INJECTORS_FS\n};\n\nexport const DECLARATION_INJECT_MARKER = '__LUMA_INJECT_DECLARATIONS__'; // Uniform/attribute declarations\n\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/; // Beginning of main\nconst REGEX_END_OF_MAIN = /}\\n?[^{}]*$/; // End of main, assumes main is last function\nconst fragments = [];\n\n// A minimal shader injection/templating system.\n// RFC: https://github.com/visgl/luma.gl/blob/7.0-release/dev-docs/RFCs/v6.0/shader-injection-rfc.md\n/* eslint-disable complexity */\nexport default function injectShader(source, type, inject, injectStandardStubs = false) {\n const isVertex = type === VERTEX_SHADER;\n\n for (const key in inject) {\n const fragmentData = inject[key];\n fragmentData.sort((a, b) => a.order - b.order);\n fragments.length = fragmentData.length;\n for (let i = 0, len = fragmentData.length; i < len; ++i) {\n fragments[i] = fragmentData[i].injection;\n }\n const fragmentString = `${fragments.join('\\n')}\\n`;\n switch (key) {\n // declarations are injected before the main function\n case 'vs:#decl':\n if (isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'vs:#main-start':\n if (isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'vs:#main-end':\n if (isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n break;\n // declarations are injected before the main function\n case 'fs:#decl':\n if (!isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'fs:#main-start':\n if (!isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'fs:#main-end':\n if (!isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n break;\n\n default:\n // TODO(Tarek): I think this usage should be deprecated.\n\n // inject code after key, leaving key in place\n source = source.replace(key, match => match + fragmentString);\n }\n }\n\n // Remove if it hasn't already been replaced\n source = source.replace(DECLARATION_INJECT_MARKER, '');\n\n // Finally, if requested, insert an automatic module injector chunk\n if (injectStandardStubs) {\n source = source.replace(/\\}\\s*$/, match => match + MODULE_INJECTORS[type]);\n }\n\n return source;\n}\n\n/* eslint-enable complexity */\n\n// Takes an array of inject objects and combines them into one\nexport function combineInjects(injects) {\n const result = {};\n assert(Array.isArray(injects) && injects.length > 1);\n injects.forEach(inject => {\n for (const key in inject) {\n result[key] = result[key] ? `${result[key]}\\n${inject[key]}` : inject[key];\n }\n });\n return result;\n}\n"],"file":"inject-shader.js"}
1
+ {"version":3,"sources":["../../../src/lib/inject-shader.js"],"names":["MODULE_INJECTORS_VS","MODULE_INJECTORS_FS","VERTEX_SHADER","FRAGMENT_SHADER","assert","MODULE_INJECTORS","DECLARATION_INJECT_MARKER","REGEX_START_OF_MAIN","REGEX_END_OF_MAIN","fragments","injectShader","source","type","inject","injectStandardStubs","isVertex","key","fragmentData","sort","a","b","order","length","i","len","injection","fragmentString","join","replace","match","combineInjects","injects","result","Array","isArray","forEach"],"mappings":"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","sourcesContent":["import {MODULE_INJECTORS_VS, MODULE_INJECTORS_FS} from '../modules/module-injectors';\nimport {VERTEX_SHADER, FRAGMENT_SHADER} from './constants';\nimport {assert} from '../utils';\n\n// TODO - experimental\nconst MODULE_INJECTORS = {\n [VERTEX_SHADER]: MODULE_INJECTORS_VS,\n [FRAGMENT_SHADER]: MODULE_INJECTORS_FS\n};\n\nexport const DECLARATION_INJECT_MARKER = '__LUMA_INJECT_DECLARATIONS__'; // Uniform/attribute declarations\n\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/; // Beginning of main\nconst REGEX_END_OF_MAIN = /}\\n?[^{}]*$/; // End of main, assumes main is last function\nconst fragments = [];\n\n// A minimal shader injection/templating system.\n// RFC: https://github.com/visgl/luma.gl/blob/7.0-release/dev-docs/RFCs/v6.0/shader-injection-rfc.md\n/* eslint-disable complexity */\nexport default function injectShader(source, type, inject, injectStandardStubs = false) {\n const isVertex = type === VERTEX_SHADER;\n\n for (const key in inject) {\n const fragmentData = inject[key];\n fragmentData.sort((a, b) => a.order - b.order);\n fragments.length = fragmentData.length;\n for (let i = 0, len = fragmentData.length; i < len; ++i) {\n fragments[i] = fragmentData[i].injection;\n }\n const fragmentString = `${fragments.join('\\n')}\\n`;\n switch (key) {\n // declarations are injected before the main function\n case 'vs:#decl':\n if (isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'vs:#main-start':\n if (isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'vs:#main-end':\n if (isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n break;\n // declarations are injected before the main function\n case 'fs:#decl':\n if (!isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'fs:#main-start':\n if (!isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'fs:#main-end':\n if (!isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n break;\n\n default:\n // TODO(Tarek): I think this usage should be deprecated.\n\n // inject code after key, leaving key in place\n source = source.replace(key, match => match + fragmentString);\n }\n }\n\n // Remove if it hasn't already been replaced\n source = source.replace(DECLARATION_INJECT_MARKER, '');\n\n // Finally, if requested, insert an automatic module injector chunk\n if (injectStandardStubs) {\n source = source.replace(/\\}\\s*$/, match => match + MODULE_INJECTORS[type]);\n }\n\n return source;\n}\n\n/* eslint-enable complexity */\n\n// Takes an array of inject objects and combines them into one\nexport function combineInjects(injects) {\n const result = {};\n assert(Array.isArray(injects) && injects.length > 1);\n injects.forEach(inject => {\n for (const key in inject) {\n result[key] = result[key] ? `${result[key]}\\n${inject[key]}` : inject[key];\n }\n });\n return result;\n}\n"],"file":"inject-shader.js"}
@@ -4,108 +4,37 @@ export function getPlatformShaderDefines(gl) {
4
4
 
5
5
  switch (debugInfo.gpuVendor.toLowerCase()) {
6
6
  case 'nvidia':
7
- return `\
8
- #define NVIDIA_GPU
9
- // Nvidia optimizes away the calculation necessary for emulated fp64
10
- #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
11
- `;
7
+ return "#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n";
12
8
 
13
9
  case 'intel':
14
- return `\
15
- #define INTEL_GPU
16
- // Intel optimizes away the calculation necessary for emulated fp64
17
- #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
18
- // Intel's built-in 'tan' function doesn't have acceptable precision
19
- #define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
20
- // Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
21
- #define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
22
- `;
10
+ return "#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";
23
11
 
24
12
  case 'amd':
25
- return `\
26
- #define AMD_GPU
27
- `;
13
+ return "#define AMD_GPU\n";
28
14
 
29
15
  default:
30
- return `\
31
- #define DEFAULT_GPU
32
- // Prevent driver from optimizing away the calculation necessary for emulated fp64
33
- #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
34
- // Intel's built-in 'tan' function doesn't have acceptable precision
35
- #define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
36
- // Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
37
- #define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
38
- `;
16
+ return "#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";
39
17
  }
40
18
  }
41
19
  export function getVersionDefines(gl, glslVersion, isFragment) {
42
- let versionDefines = `\
43
- #if (__VERSION__ > 120)
44
-
45
- # define FEATURE_GLSL_DERIVATIVES
46
- # define FEATURE_GLSL_DRAW_BUFFERS
47
- # define FEATURE_GLSL_FRAG_DEPTH
48
- # define FEATURE_GLSL_TEXTURE_LOD
49
-
50
- // DEPRECATED FLAGS, remove in v9
51
- # define FRAG_DEPTH
52
- # define DERIVATIVES
53
- # define DRAW_BUFFERS
54
- # define TEXTURE_LOD
55
-
56
- #endif // __VERSION
57
- `;
20
+ let versionDefines = "#if (__VERSION__ > 120)\n\n# define FEATURE_GLSL_DERIVATIVES\n# define FEATURE_GLSL_DRAW_BUFFERS\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FEATURE_GLSL_TEXTURE_LOD\n\n// DEPRECATED FLAGS, remove in v9\n# define FRAG_DEPTH\n# define DERIVATIVES\n# define DRAW_BUFFERS\n# define TEXTURE_LOD\n\n#endif // __VERSION\n";
58
21
 
59
22
  if (hasFeatures(gl, FEATURES.GLSL_FRAG_DEPTH)) {
60
- versionDefines += `\
61
-
62
- // FRAG_DEPTH => gl_FragDepth is available
63
- #ifdef GL_EXT_frag_depth
64
- #extension GL_EXT_frag_depth : enable
65
- # define FEATURE_GLSL_FRAG_DEPTH
66
- # define FRAG_DEPTH
67
- # define gl_FragDepth gl_FragDepthEXT
68
- #endif
69
- `;
23
+ versionDefines += "\n// FRAG_DEPTH => gl_FragDepth is available\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FRAG_DEPTH\n# define gl_FragDepth gl_FragDepthEXT\n#endif\n";
70
24
  }
71
25
 
72
26
  if (hasFeatures(gl, FEATURES.GLSL_DERIVATIVES) && canCompileGLGSExtension(gl, FEATURES.GLSL_DERIVATIVES)) {
73
- versionDefines += `\
74
-
75
- // DERIVATIVES => dxdF, dxdY and fwidth are available
76
- #ifdef GL_OES_standard_derivatives
77
- #extension GL_OES_standard_derivatives : enable
78
- # define FEATURE_GLSL_DERIVATIVES
79
- # define DERIVATIVES
80
- #endif
81
- `;
27
+ versionDefines += "\n// DERIVATIVES => dxdF, dxdY and fwidth are available\n#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n# define FEATURE_GLSL_DERIVATIVES\n# define DERIVATIVES\n#endif\n";
82
28
  }
83
29
 
84
30
  if (hasFeatures(gl, FEATURES.GLSL_FRAG_DATA) && canCompileGLGSExtension(gl, FEATURES.GLSL_FRAG_DATA, {
85
31
  behavior: 'require'
86
32
  })) {
87
- versionDefines += `\
88
-
89
- // DRAW_BUFFERS => gl_FragData[] is available
90
- #ifdef GL_EXT_draw_buffers
91
- #extension GL_EXT_draw_buffers : require
92
- #define FEATURE_GLSL_DRAW_BUFFERS
93
- #define DRAW_BUFFERS
94
- #endif
95
- `;
33
+ versionDefines += "\n// DRAW_BUFFERS => gl_FragData[] is available\n#ifdef GL_EXT_draw_buffers\n#extension GL_EXT_draw_buffers : require\n#define FEATURE_GLSL_DRAW_BUFFERS\n#define DRAW_BUFFERS\n#endif\n";
96
34
  }
97
35
 
98
36
  if (hasFeatures(gl, FEATURES.GLSL_TEXTURE_LOD)) {
99
- versionDefines += `\
100
- // TEXTURE_LOD => texture2DLod etc are available
101
- #ifdef GL_EXT_shader_texture_lod
102
- #extension GL_EXT_shader_texture_lod : enable
103
-
104
- # define FEATURE_GLSL_TEXTURE_LOD
105
- # define TEXTURE_LOD
106
-
107
- #endif
108
- `;
37
+ versionDefines += "// TEXTURE_LOD => texture2DLod etc are available\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod : enable\n\n# define FEATURE_GLSL_TEXTURE_LOD\n# define TEXTURE_LOD\n\n#endif\n";
109
38
  }
110
39
 
111
40
  return versionDefines;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/platform-defines.js"],"names":["getContextInfo","hasFeatures","canCompileGLGSExtension","FEATURES","getPlatformShaderDefines","gl","debugInfo","gpuVendor","toLowerCase","getVersionDefines","glslVersion","isFragment","versionDefines","GLSL_FRAG_DEPTH","GLSL_DERIVATIVES","GLSL_FRAG_DATA","behavior","GLSL_TEXTURE_LOD"],"mappings":"AAAA,SAAQA,cAAR,EAAwBC,WAAxB,EAAqCC,uBAArC,EAA8DC,QAA9D,QAA6E,qBAA7E;AAEA,OAAO,SAASC,wBAAT,CAAkCC,EAAlC,EAAsC;AAC3C,QAAMC,SAAS,GAAGN,cAAc,CAACK,EAAD,CAAhC;;AAEA,UAAQC,SAAS,CAACC,SAAV,CAAoBC,WAApB,EAAR;AACE,SAAK,QAAL;AACE,aAAQ;AACd;AACA;AACA;AACA,CAJM;;AAMF,SAAK,OAAL;AACE,aAAQ;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CARM;;AAUF,SAAK,KAAL;AAEE,aAAQ;AACd;AACA,CAFM;;AAIF;AAIE,aAAQ;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CARM;AA7BJ;AAuCD;AAED,OAAO,SAASC,iBAAT,CAA2BJ,EAA3B,EAA+BK,WAA/B,EAA4CC,UAA5C,EAAwD;AAE7D,MAAIC,cAAc,GAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAfE;;AAiBA,MAAIX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACU,eAAd,CAAf,EAA+C;AAC7CD,IAAAA,cAAc,IAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CATI;AAUD;;AACD,MACEX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACW,gBAAd,CAAX,IACAZ,uBAAuB,CAACG,EAAD,EAAKF,QAAQ,CAACW,gBAAd,CAFzB,EAGE;AACAF,IAAAA,cAAc,IAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CARI;AASD;;AACD,MACEX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACY,cAAd,CAAX,IACAb,uBAAuB,CAACG,EAAD,EAAKF,QAAQ,CAACY,cAAd,EAA8B;AAACC,IAAAA,QAAQ,EAAE;AAAX,GAA9B,CAFzB,EAGE;AACAJ,IAAAA,cAAc,IAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CARI;AASD;;AACD,MAAIX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACc,gBAAd,CAAf,EAAgD;AAC9CL,IAAAA,cAAc,IAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CATI;AAUD;;AACD,SAAOA,cAAP;AACD","sourcesContent":["import {getContextInfo, hasFeatures, canCompileGLGSExtension, FEATURES} from '../utils/webgl-info';\n\nexport function getPlatformShaderDefines(gl) {\n const debugInfo = getContextInfo(gl);\n\n switch (debugInfo.gpuVendor.toLowerCase()) {\n case 'nvidia':\n return `\\\n#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n`;\n\n case 'intel':\n return `\\\n#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n\n case 'amd':\n // AMD Does not eliminate fp64 code\n return `\\\n#define AMD_GPU\n`;\n\n default:\n // We don't know what GPU it is, could be that the GPU driver or\n // browser is not implementing UNMASKED_RENDERER constant and not\n // reporting a correct name\n return `\\\n#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n }\n}\n\nexport function getVersionDefines(gl, glslVersion, isFragment) {\n // Add shadertools defines to let shaders portably v1/v3 check for features\n let versionDefines = `\\\n#if (__VERSION__ > 120)\n\n# define FEATURE_GLSL_DERIVATIVES\n# define FEATURE_GLSL_DRAW_BUFFERS\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FEATURE_GLSL_TEXTURE_LOD\n\n// DEPRECATED FLAGS, remove in v9\n# define FRAG_DEPTH\n# define DERIVATIVES\n# define DRAW_BUFFERS\n# define TEXTURE_LOD\n\n#endif // __VERSION\n`;\n\n if (hasFeatures(gl, FEATURES.GLSL_FRAG_DEPTH)) {\n versionDefines += `\\\n\n// FRAG_DEPTH => gl_FragDepth is available\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FRAG_DEPTH\n# define gl_FragDepth gl_FragDepthEXT\n#endif\n`;\n }\n if (\n hasFeatures(gl, FEATURES.GLSL_DERIVATIVES) &&\n canCompileGLGSExtension(gl, FEATURES.GLSL_DERIVATIVES)\n ) {\n versionDefines += `\\\n\n// DERIVATIVES => dxdF, dxdY and fwidth are available\n#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n# define FEATURE_GLSL_DERIVATIVES\n# define DERIVATIVES\n#endif\n`;\n }\n if (\n hasFeatures(gl, FEATURES.GLSL_FRAG_DATA) &&\n canCompileGLGSExtension(gl, FEATURES.GLSL_FRAG_DATA, {behavior: 'require'})\n ) {\n versionDefines += `\\\n\n// DRAW_BUFFERS => gl_FragData[] is available\n#ifdef GL_EXT_draw_buffers\n#extension GL_EXT_draw_buffers : require\n#define FEATURE_GLSL_DRAW_BUFFERS\n#define DRAW_BUFFERS\n#endif\n`;\n }\n if (hasFeatures(gl, FEATURES.GLSL_TEXTURE_LOD)) {\n versionDefines += `\\\n// TEXTURE_LOD => texture2DLod etc are available\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod : enable\n\n# define FEATURE_GLSL_TEXTURE_LOD\n# define TEXTURE_LOD\n\n#endif\n`;\n }\n return versionDefines;\n}\n"],"file":"platform-defines.js"}
1
+ {"version":3,"sources":["../../../src/lib/platform-defines.js"],"names":["getContextInfo","hasFeatures","canCompileGLGSExtension","FEATURES","getPlatformShaderDefines","gl","debugInfo","gpuVendor","toLowerCase","getVersionDefines","glslVersion","isFragment","versionDefines","GLSL_FRAG_DEPTH","GLSL_DERIVATIVES","GLSL_FRAG_DATA","behavior","GLSL_TEXTURE_LOD"],"mappings":"AAAA,SAAQA,cAAR,EAAwBC,WAAxB,EAAqCC,uBAArC,EAA8DC,QAA9D,QAA6E,qBAA7E;AAEA,OAAO,SAASC,wBAAT,CAAkCC,EAAlC,EAAsC;AAC3C,QAAMC,SAAS,GAAGN,cAAc,CAACK,EAAD,CAAhC;;AAEA,UAAQC,SAAS,CAACC,SAAV,CAAoBC,WAApB,EAAR;AACE,SAAK,QAAL;AACE;;AAMF,SAAK,OAAL;AACE;;AAUF,SAAK,KAAL;AAEE;;AAIF;AAIE;AA7BJ;AAuCD;AAED,OAAO,SAASC,iBAAT,CAA2BJ,EAA3B,EAA+BK,WAA/B,EAA4CC,UAA5C,EAAwD;AAE7D,MAAIC,cAAc,gUAAlB;;AAiBA,MAAIX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACU,eAAd,CAAf,EAA+C;AAC7CD,IAAAA,cAAc,2NAAd;AAUD;;AACD,MACEX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACW,gBAAd,CAAX,IACAZ,uBAAuB,CAACG,EAAD,EAAKF,QAAQ,CAACW,gBAAd,CAFzB,EAGE;AACAF,IAAAA,cAAc,qNAAd;AASD;;AACD,MACEX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACY,cAAd,CAAX,IACAb,uBAAuB,CAACG,EAAD,EAAKF,QAAQ,CAACY,cAAd,EAA8B;AAACC,IAAAA,QAAQ,EAAE;AAAX,GAA9B,CAFzB,EAGE;AACAJ,IAAAA,cAAc,8LAAd;AASD;;AACD,MAAIX,WAAW,CAACI,EAAD,EAAKF,QAAQ,CAACc,gBAAd,CAAf,EAAgD;AAC9CL,IAAAA,cAAc,8MAAd;AAUD;;AACD,SAAOA,cAAP;AACD","sourcesContent":["import {getContextInfo, hasFeatures, canCompileGLGSExtension, FEATURES} from '../utils/webgl-info';\n\nexport function getPlatformShaderDefines(gl) {\n const debugInfo = getContextInfo(gl);\n\n switch (debugInfo.gpuVendor.toLowerCase()) {\n case 'nvidia':\n return `\\\n#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n`;\n\n case 'intel':\n return `\\\n#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n\n case 'amd':\n // AMD Does not eliminate fp64 code\n return `\\\n#define AMD_GPU\n`;\n\n default:\n // We don't know what GPU it is, could be that the GPU driver or\n // browser is not implementing UNMASKED_RENDERER constant and not\n // reporting a correct name\n return `\\\n#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n }\n}\n\nexport function getVersionDefines(gl, glslVersion, isFragment) {\n // Add shadertools defines to let shaders portably v1/v3 check for features\n let versionDefines = `\\\n#if (__VERSION__ > 120)\n\n# define FEATURE_GLSL_DERIVATIVES\n# define FEATURE_GLSL_DRAW_BUFFERS\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FEATURE_GLSL_TEXTURE_LOD\n\n// DEPRECATED FLAGS, remove in v9\n# define FRAG_DEPTH\n# define DERIVATIVES\n# define DRAW_BUFFERS\n# define TEXTURE_LOD\n\n#endif // __VERSION\n`;\n\n if (hasFeatures(gl, FEATURES.GLSL_FRAG_DEPTH)) {\n versionDefines += `\\\n\n// FRAG_DEPTH => gl_FragDepth is available\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FRAG_DEPTH\n# define gl_FragDepth gl_FragDepthEXT\n#endif\n`;\n }\n if (\n hasFeatures(gl, FEATURES.GLSL_DERIVATIVES) &&\n canCompileGLGSExtension(gl, FEATURES.GLSL_DERIVATIVES)\n ) {\n versionDefines += `\\\n\n// DERIVATIVES => dxdF, dxdY and fwidth are available\n#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n# define FEATURE_GLSL_DERIVATIVES\n# define DERIVATIVES\n#endif\n`;\n }\n if (\n hasFeatures(gl, FEATURES.GLSL_FRAG_DATA) &&\n canCompileGLGSExtension(gl, FEATURES.GLSL_FRAG_DATA, {behavior: 'require'})\n ) {\n versionDefines += `\\\n\n// DRAW_BUFFERS => gl_FragData[] is available\n#ifdef GL_EXT_draw_buffers\n#extension GL_EXT_draw_buffers : require\n#define FEATURE_GLSL_DRAW_BUFFERS\n#define DRAW_BUFFERS\n#endif\n`;\n }\n if (hasFeatures(gl, FEATURES.GLSL_TEXTURE_LOD)) {\n versionDefines += `\\\n// TEXTURE_LOD => texture2DLod etc are available\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod : enable\n\n# define FEATURE_GLSL_TEXTURE_LOD\n# define TEXTURE_LOD\n\n#endif\n`;\n }\n return versionDefines;\n}\n"],"file":"platform-defines.js"}
@@ -16,12 +16,14 @@ function getShaderDependencies(modules) {
16
16
  return Object.keys(moduleDepth).sort((a, b) => moduleDepth[b] - moduleDepth[a]).map(name => moduleMap[name]);
17
17
  }
18
18
 
19
- function getDependencyGraph({
20
- modules,
21
- level,
22
- moduleMap,
23
- moduleDepth
24
- }) {
19
+ function getDependencyGraph(_ref) {
20
+ let {
21
+ modules,
22
+ level,
23
+ moduleMap,
24
+ moduleDepth
25
+ } = _ref;
26
+
25
27
  if (level >= 5) {
26
28
  throw new Error('Possible loop in shader dependency graph');
27
29
  }
@@ -52,7 +54,7 @@ function instantiateModules(modules, seen) {
52
54
  return module;
53
55
  }
54
56
 
55
- assert(typeof module !== 'string', `Shader module use by name is deprecated. Import shader module '${module}' and use it directly.`);
57
+ assert(typeof module !== 'string', "Shader module use by name is deprecated. Import shader module '".concat(module, "' and use it directly."));
56
58
  assert(module.name, 'shader module has no name');
57
59
  module = new ShaderModule(module);
58
60
  module.dependencies = instantiateModules(module.dependencies);