@flighthq/scene3d-gl 0.2.1-next.840.857425c
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/anisotropyPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.js +45 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.js +102 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.js.map +1 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.js +45 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/customShaderGlMeshMaterialRenderer.d.ts +6 -0
- package/dist/customShaderGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/customShaderGlMeshMaterialRenderer.js +136 -0
- package/dist/customShaderGlMeshMaterialRenderer.js.map +1 -0
- package/dist/depthGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/depthGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/depthGlMeshMaterialRenderer.js +36 -0
- package/dist/depthGlMeshMaterialRenderer.js.map +1 -0
- package/dist/drawGlScene3D.d.ts +3 -0
- package/dist/drawGlScene3D.d.ts.map +1 -0
- package/dist/drawGlScene3D.js +251 -0
- package/dist/drawGlScene3D.js.map +1 -0
- package/dist/emissiveGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/emissiveGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/emissiveGlMeshMaterialRenderer.js +49 -0
- package/dist/emissiveGlMeshMaterialRenderer.js.map +1 -0
- package/dist/enableGlScene3DColorSpaceGuards.d.ts +4 -0
- package/dist/enableGlScene3DColorSpaceGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DColorSpaceGuards.js +22 -0
- package/dist/enableGlScene3DColorSpaceGuards.js.map +1 -0
- package/dist/enableGlScene3DCustomShaderGuards.d.ts +4 -0
- package/dist/enableGlScene3DCustomShaderGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DCustomShaderGuards.js +71 -0
- package/dist/enableGlScene3DCustomShaderGuards.js.map +1 -0
- package/dist/enableGlScene3DDeformGuards.d.ts +4 -0
- package/dist/enableGlScene3DDeformGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DDeformGuards.js +42 -0
- package/dist/enableGlScene3DDeformGuards.js.map +1 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts +4 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.js +21 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.js.map +1 -0
- package/dist/explainGlScene3DForwardLightSelection.d.ts +3 -0
- package/dist/explainGlScene3DForwardLightSelection.d.ts.map +1 -0
- package/dist/explainGlScene3DForwardLightSelection.js +19 -0
- package/dist/explainGlScene3DForwardLightSelection.js.map +1 -0
- package/dist/glClassicPrelude.d.ts +9 -0
- package/dist/glClassicPrelude.d.ts.map +1 -0
- package/dist/glClassicPrelude.js +288 -0
- package/dist/glClassicPrelude.js.map +1 -0
- package/dist/glDebugPrelude.d.ts +9 -0
- package/dist/glDebugPrelude.d.ts.map +1 -0
- package/dist/glDebugPrelude.js +143 -0
- package/dist/glDebugPrelude.js.map +1 -0
- package/dist/glEnvironmentCube.d.ts +5 -0
- package/dist/glEnvironmentCube.d.ts.map +1 -0
- package/dist/glEnvironmentCube.js +65 -0
- package/dist/glEnvironmentCube.js.map +1 -0
- package/dist/glEnvironmentIblBake.d.ts +4 -0
- package/dist/glEnvironmentIblBake.d.ts.map +1 -0
- package/dist/glEnvironmentIblBake.js +365 -0
- package/dist/glEnvironmentIblBake.js.map +1 -0
- package/dist/glEnvironmentSkybox.d.ts +3 -0
- package/dist/glEnvironmentSkybox.d.ts.map +1 -0
- package/dist/glEnvironmentSkybox.js +95 -0
- package/dist/glEnvironmentSkybox.js.map +1 -0
- package/dist/glLitProgram.d.ts +5 -0
- package/dist/glLitProgram.d.ts.map +1 -0
- package/dist/glLitProgram.js +211 -0
- package/dist/glLitProgram.js.map +1 -0
- package/dist/glMatcapPrelude.d.ts +8 -0
- package/dist/glMatcapPrelude.d.ts.map +1 -0
- package/dist/glMatcapPrelude.js +118 -0
- package/dist/glMatcapPrelude.js.map +1 -0
- package/dist/glMeshMaterialRegistry.d.ts +5 -0
- package/dist/glMeshMaterialRegistry.d.ts.map +1 -0
- package/dist/glMeshMaterialRegistry.js +29 -0
- package/dist/glMeshMaterialRegistry.js.map +1 -0
- package/dist/glMeshProgram.d.ts +14 -0
- package/dist/glMeshProgram.d.ts.map +1 -0
- package/dist/glMeshProgram.js +193 -0
- package/dist/glMeshProgram.js.map +1 -0
- package/dist/glMeshUpload.d.ts +4 -0
- package/dist/glMeshUpload.d.ts.map +1 -0
- package/dist/glMeshUpload.js +190 -0
- package/dist/glMeshUpload.js.map +1 -0
- package/dist/glParticleEmitter3D.d.ts +4 -0
- package/dist/glParticleEmitter3D.d.ts.map +1 -0
- package/dist/glParticleEmitter3D.js +342 -0
- package/dist/glParticleEmitter3D.js.map +1 -0
- package/dist/glPbrPrelude.d.ts +8 -0
- package/dist/glPbrPrelude.d.ts.map +1 -0
- package/dist/glPbrPrelude.js +569 -0
- package/dist/glPbrPrelude.js.map +1 -0
- package/dist/glPbrProgramCache.d.ts +4 -0
- package/dist/glPbrProgramCache.d.ts.map +1 -0
- package/dist/glPbrProgramCache.js +63 -0
- package/dist/glPbrProgramCache.js.map +1 -0
- package/dist/glPbrStandardBlock.d.ts +13 -0
- package/dist/glPbrStandardBlock.d.ts.map +1 -0
- package/dist/glPbrStandardBlock.js +107 -0
- package/dist/glPbrStandardBlock.js.map +1 -0
- package/dist/glScene3DRuntime.d.ts +5 -0
- package/dist/glScene3DRuntime.d.ts.map +1 -0
- package/dist/glScene3DRuntime.js +99 -0
- package/dist/glScene3DRuntime.js.map +1 -0
- package/dist/glScene3DTestHelper.d.ts +20 -0
- package/dist/glScene3DTestHelper.d.ts.map +1 -0
- package/dist/glScene3DTestHelper.js +178 -0
- package/dist/glScene3DTestHelper.js.map +1 -0
- package/dist/glScene3DTime.d.ts +4 -0
- package/dist/glScene3DTime.d.ts.map +1 -0
- package/dist/glScene3DTime.js +18 -0
- package/dist/glScene3DTime.js.map +1 -0
- package/dist/glShadedBuiltInModifiers.d.ts +11 -0
- package/dist/glShadedBuiltInModifiers.d.ts.map +1 -0
- package/dist/glShadedBuiltInModifiers.js +386 -0
- package/dist/glShadedBuiltInModifiers.js.map +1 -0
- package/dist/glShadedModifierSnippet.d.ts +4 -0
- package/dist/glShadedModifierSnippet.d.ts.map +1 -0
- package/dist/glShadedModifierSnippet.js +24 -0
- package/dist/glShadedModifierSnippet.js.map +1 -0
- package/dist/glShadedPrelude.d.ts +5 -0
- package/dist/glShadedPrelude.d.ts.map +1 -0
- package/dist/glShadedPrelude.js +393 -0
- package/dist/glShadedPrelude.js.map +1 -0
- package/dist/glShadowMap.d.ts +3 -0
- package/dist/glShadowMap.d.ts.map +1 -0
- package/dist/glShadowMap.js +150 -0
- package/dist/glShadowMap.js.map +1 -0
- package/dist/glToonPrelude.d.ts +7 -0
- package/dist/glToonPrelude.d.ts.map +1 -0
- package/dist/glToonPrelude.js +172 -0
- package/dist/glToonPrelude.js.map +1 -0
- package/dist/glUnlitPrelude.d.ts +9 -0
- package/dist/glUnlitPrelude.d.ts.map +1 -0
- package/dist/glUnlitPrelude.js +160 -0
- package/dist/glUnlitPrelude.js.map +1 -0
- package/dist/glWireframePrelude.d.ts +6 -0
- package/dist/glWireframePrelude.d.ts.map +1 -0
- package/dist/glWireframePrelude.js +56 -0
- package/dist/glWireframePrelude.js.map +1 -0
- package/dist/glWireframeUpload.d.ts +4 -0
- package/dist/glWireframeUpload.d.ts.map +1 -0
- package/dist/glWireframeUpload.js +85 -0
- package/dist/glWireframeUpload.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.js +54 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/lambertGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/lambertGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/lambertGlMeshMaterialRenderer.js +70 -0
- package/dist/lambertGlMeshMaterialRenderer.js.map +1 -0
- package/dist/matcapGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/matcapGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/matcapGlMeshMaterialRenderer.js +49 -0
- package/dist/matcapGlMeshMaterialRenderer.js.map +1 -0
- package/dist/normalGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/normalGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/normalGlMeshMaterialRenderer.js +39 -0
- package/dist/normalGlMeshMaterialRenderer.js.map +1 -0
- package/dist/phongGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/phongGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/phongGlMeshMaterialRenderer.js +90 -0
- package/dist/phongGlMeshMaterialRenderer.js.map +1 -0
- package/dist/prepareGlScene3DForwardLights.d.ts +3 -0
- package/dist/prepareGlScene3DForwardLights.d.ts.map +1 -0
- package/dist/prepareGlScene3DForwardLights.js +117 -0
- package/dist/prepareGlScene3DForwardLights.js.map +1 -0
- package/dist/presentGlScene3D.d.ts +3 -0
- package/dist/presentGlScene3D.d.ts.map +1 -0
- package/dist/presentGlScene3D.js +21 -0
- package/dist/presentGlScene3D.js.map +1 -0
- package/dist/registerStandardPbrGlMaterial.d.ts +3 -0
- package/dist/registerStandardPbrGlMaterial.d.ts.map +1 -0
- package/dist/registerStandardPbrGlMaterial.js +11 -0
- package/dist/registerStandardPbrGlMaterial.js.map +1 -0
- package/dist/shadedGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/shadedGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/shadedGlMeshMaterialRenderer.js +135 -0
- package/dist/shadedGlMeshMaterialRenderer.js.map +1 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.js +54 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js +121 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/specularPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularPbrGlMeshMaterialRenderer.js +55 -0
- package/dist/specularPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/standardPbrGlMeshMaterialRenderer.d.ts +3 -0
- package/dist/standardPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/standardPbrGlMeshMaterialRenderer.js +35 -0
- package/dist/standardPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.js +57 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/toonGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/toonGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/toonGlMeshMaterialRenderer.js +81 -0
- package/dist/toonGlMeshMaterialRenderer.js.map +1 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js +62 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/unlitGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/unlitGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/unlitGlMeshMaterialRenderer.js +61 -0
- package/dist/unlitGlMeshMaterialRenderer.js.map +1 -0
- package/dist/vertexColorGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/vertexColorGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/vertexColorGlMeshMaterialRenderer.js +54 -0
- package/dist/vertexColorGlMeshMaterialRenderer.js.map +1 -0
- package/dist/wireframeGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/wireframeGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/wireframeGlMeshMaterialRenderer.js +50 -0
- package/dist/wireframeGlMeshMaterialRenderer.js.map +1 -0
- package/package.json +58 -0
- package/src/anisotropyPbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/blinnPhongGlMeshMaterialRenderer.test.ts +94 -0
- package/src/clearcoatPbrGlMeshMaterialRenderer.test.ts +81 -0
- package/src/customShaderGlMeshMaterialRenderer.test.ts +169 -0
- package/src/depthGlMeshMaterialRenderer.test.ts +69 -0
- package/src/drawGlScene3D.test.ts +304 -0
- package/src/emissiveGlMeshMaterialRenderer.test.ts +60 -0
- package/src/enableGlScene3DColorSpaceGuards.test.ts +63 -0
- package/src/enableGlScene3DCustomShaderGuards.test.ts +85 -0
- package/src/enableGlScene3DDeformGuards.test.ts +98 -0
- package/src/enableGlScene3DForwardLightSelectionGuards.test.ts +84 -0
- package/src/explainGlScene3DForwardLightSelection.test.ts +32 -0
- package/src/glClassicPrelude.test.ts +214 -0
- package/src/glDebugPrelude.test.ts +94 -0
- package/src/glEnvironmentCube.test.ts +71 -0
- package/src/glEnvironmentIblBake.test.ts +31 -0
- package/src/glEnvironmentSkybox.test.ts +24 -0
- package/src/glLitProgram.test.ts +181 -0
- package/src/glMatcapPrelude.test.ts +74 -0
- package/src/glMeshMaterialRegistry.test.ts +52 -0
- package/src/glMeshProgram.test.ts +406 -0
- package/src/glMeshUpload.test.ts +311 -0
- package/src/glParticleEmitter3D.test.ts +280 -0
- package/src/glPbrPrelude.test.ts +178 -0
- package/src/glPbrProgramCache.test.ts +116 -0
- package/src/glPbrStandardBlock.test.ts +85 -0
- package/src/glScene3DRuntime.test.ts +108 -0
- package/src/glScene3DTime.test.ts +31 -0
- package/src/glShadedBuiltInModifiers.test.ts +377 -0
- package/src/glShadedModifierSnippet.test.ts +46 -0
- package/src/glShadedPrelude.test.ts +177 -0
- package/src/glShadowMap.test.ts +219 -0
- package/src/glToonPrelude.test.ts +118 -0
- package/src/glUnlitPrelude.test.ts +156 -0
- package/src/glWireframePrelude.test.ts +46 -0
- package/src/glWireframeUpload.test.ts +50 -0
- package/src/iridescencePbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/lambertGlMeshMaterialRenderer.test.ts +92 -0
- package/src/matcapGlMeshMaterialRenderer.test.ts +70 -0
- package/src/normalGlMeshMaterialRenderer.test.ts +69 -0
- package/src/phongGlMeshMaterialRenderer.test.ts +94 -0
- package/src/prepareGlScene3DForwardLights.test.ts +106 -0
- package/src/presentGlScene3D.test.ts +98 -0
- package/src/registerStandardPbrGlMaterial.test.ts +14 -0
- package/src/shadedGlMeshMaterialRenderer.test.ts +106 -0
- package/src/sheenPbrGlMeshMaterialRenderer.test.ts +83 -0
- package/src/specularGlossinessPbrGlMeshMaterialRenderer.test.ts +96 -0
- package/src/specularPbrGlMeshMaterialRenderer.test.ts +83 -0
- package/src/standardPbrGlMeshMaterialRenderer.test.ts +88 -0
- package/src/subsurfacePbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/toonGlMeshMaterialRenderer.test.ts +92 -0
- package/src/transmissionVolumePbrGlMeshMaterialRenderer.test.ts +93 -0
- package/src/unlitGlMeshMaterialRenderer.test.ts +88 -0
- package/src/vertexColorGlMeshMaterialRenderer.test.ts +60 -0
- package/src/wireframeGlMeshMaterialRenderer.test.ts +69 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
3
|
+
import { bindGlImageResourceTexture } from '@flighthq/render-gl';
|
|
4
|
+
import { animatedNormalModifierDefinition, dissolveModifierDefinition, emissiveModifierDefinition, envReflectModifierDefinition, fogModifierDefinition, rimModifierDefinition, toonModifierDefinition, vertexDisplaceModifierDefinition, } from '@flighthq/shading';
|
|
5
|
+
import { EmissiveModifierFacing, FogModifierMode, VertexDisplaceModifierSource } from '@flighthq/types';
|
|
6
|
+
import { registerGlModifierSnippet } from './glShadedModifierSnippet';
|
|
7
|
+
// The built-in GL modifier snippets — the backend halves of @flighthq/shading's eight built-in
|
|
8
|
+
// modifier descriptors, across all six slots: VertexDisplace (Vertex), AnimatedNormal (Normal),
|
|
9
|
+
// Emissive (Emissive), and Rim/EnvReflect/Fog/Dissolve/Toon (Effect). Each SPREADS the
|
|
10
|
+
// substrate-agnostic definition (kind/slot/getDefineSignature owned by @flighthq/shading) and adds
|
|
11
|
+
// GLSL (declarations + a slot-hook contribution, names suffixed by the modifier's stack index so
|
|
12
|
+
// repeated kinds never collide) plus a per-draw uniform upload. Reusing the framework definition —
|
|
13
|
+
// rather than re-deriving the signature here — guarantees the program keyed by a stack's define-key
|
|
14
|
+
// always matches the GLSL assembled for it: Emissive `m`/`g`, AnimatedNormal `0`/`1`/`2`, Fog
|
|
15
|
+
// `l`/`e`/`x`, Dissolve ``/`m`, VertexDisplace `s`/`h`(+`a`), Rim/EnvReflect/Toon none.
|
|
16
|
+
// A UV-panned normal map perturbing the shading normal, scrolled by u_time. Signature `0` (no map,
|
|
17
|
+
// no GLSL), `1` single-layer, `2` dual-layer.
|
|
18
|
+
export const animatedNormalGlModifierSnippet = {
|
|
19
|
+
...animatedNormalModifierDefinition,
|
|
20
|
+
bind(modifier, context) {
|
|
21
|
+
const animated = modifier;
|
|
22
|
+
if (animated.map === null)
|
|
23
|
+
return;
|
|
24
|
+
const gl = context.state.gl;
|
|
25
|
+
const suffix = `_${context.index}`;
|
|
26
|
+
bindGlModifierTexture(context, animated.map, `u_animNormalMap${suffix}`);
|
|
27
|
+
const scroll = animated.scroll;
|
|
28
|
+
gl.uniform2f(gl.getUniformLocation(context.program, `u_animNormalScroll${suffix}`), scroll.x, scroll.y);
|
|
29
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_animNormalStrength${suffix}`), animated.strength ?? 1);
|
|
30
|
+
if (animated.secondaryMap !== undefined) {
|
|
31
|
+
bindGlModifierTexture(context, animated.secondaryMap, `u_animNormalMap2${suffix}`);
|
|
32
|
+
const secondary = animated.secondaryScroll ?? scroll;
|
|
33
|
+
gl.uniform2f(gl.getUniformLocation(context.program, `u_animNormalScroll2${suffix}`), secondary.x, secondary.y);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
contribution(modifier, index) {
|
|
37
|
+
const animated = modifier;
|
|
38
|
+
if (animated.map === null)
|
|
39
|
+
return '';
|
|
40
|
+
const suffix = `_${index}`;
|
|
41
|
+
const dual = animated.secondaryMap !== undefined
|
|
42
|
+
? ` animNormal += texture(u_animNormalMap2${suffix}, v_uv0 + u_animNormalScroll2${suffix} * u_time).xyz * 2.0 - 1.0;\n`
|
|
43
|
+
: '';
|
|
44
|
+
return (`{\n` +
|
|
45
|
+
` vec3 animNormal = texture(u_animNormalMap${suffix}, v_uv0 + u_animNormalScroll${suffix} * u_time).xyz * 2.0 - 1.0;\n` +
|
|
46
|
+
dual +
|
|
47
|
+
` animNormal.xy *= u_animNormalStrength${suffix};\n` +
|
|
48
|
+
` normal = normalize(tbn * animNormal);\n` +
|
|
49
|
+
`}`);
|
|
50
|
+
},
|
|
51
|
+
declarations(modifier, index) {
|
|
52
|
+
const animated = modifier;
|
|
53
|
+
if (animated.map === null)
|
|
54
|
+
return '';
|
|
55
|
+
const suffix = `_${index}`;
|
|
56
|
+
let source = `uniform sampler2D u_animNormalMap${suffix};\n` +
|
|
57
|
+
`uniform vec2 u_animNormalScroll${suffix};\n` +
|
|
58
|
+
`uniform float u_animNormalStrength${suffix};\n`;
|
|
59
|
+
if (animated.secondaryMap !== undefined) {
|
|
60
|
+
source += `uniform sampler2D u_animNormalMap2${suffix};\nuniform vec2 u_animNormalScroll2${suffix};\n`;
|
|
61
|
+
}
|
|
62
|
+
return source;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
// A self-illuminating contribution added to the shaded radiance, optionally masked and optionally
|
|
66
|
+
// gated by surface facing (the night-side city-lights case). Signature `m` (masked), `g` (facing
|
|
67
|
+
// gate), combined `mg`.
|
|
68
|
+
export const emissiveGlModifierSnippet = {
|
|
69
|
+
...emissiveModifierDefinition,
|
|
70
|
+
bind(modifier, context) {
|
|
71
|
+
const emissive = modifier;
|
|
72
|
+
const gl = context.state.gl;
|
|
73
|
+
const suffix = `_${context.index}`;
|
|
74
|
+
unpackColorToLinear(scratchRgba, emissive.color);
|
|
75
|
+
gl.uniform3f(gl.getUniformLocation(context.program, `u_emissiveColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
|
|
76
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_emissiveStrength${suffix}`), emissive.strength);
|
|
77
|
+
if (emissive.mask !== undefined)
|
|
78
|
+
bindGlModifierTexture(context, emissive.mask, `u_emissiveMask${suffix}`);
|
|
79
|
+
if (isEmissiveGated(emissive)) {
|
|
80
|
+
const sign = emissive.facing === EmissiveModifierFacing.AwayFromLight ? -1 : 1;
|
|
81
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_emissiveFacingSign${suffix}`), sign);
|
|
82
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_emissiveFacingSoftness${suffix}`), emissive.facingSoftness ?? 0);
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
contribution(modifier, index) {
|
|
86
|
+
const emissive = modifier;
|
|
87
|
+
const suffix = `_${index}`;
|
|
88
|
+
let body = `{\n` + ` vec3 emissiveTerm = u_emissiveColor${suffix} * u_emissiveStrength${suffix};\n`;
|
|
89
|
+
if (emissive.mask !== undefined)
|
|
90
|
+
body += ` emissiveTerm *= texture(u_emissiveMask${suffix}, v_uv0).rgb;\n`;
|
|
91
|
+
if (isEmissiveGated(emissive)) {
|
|
92
|
+
body +=
|
|
93
|
+
` vec3 emissiveLightDir = u_directionalCount > 0.5 ? normalize(-u_directional.xyz) : vec3(0.0, 0.0, 1.0);\n` +
|
|
94
|
+
` float emissiveFacing = dot(normal, emissiveLightDir) * u_emissiveFacingSign${suffix};\n` +
|
|
95
|
+
` float emissiveSoft = max(u_emissiveFacingSoftness${suffix}, 1e-4);\n` +
|
|
96
|
+
` emissiveTerm *= smoothstep(-emissiveSoft, emissiveSoft, emissiveFacing);\n`;
|
|
97
|
+
}
|
|
98
|
+
body += ` emissive += emissiveTerm;\n}`;
|
|
99
|
+
return body;
|
|
100
|
+
},
|
|
101
|
+
declarations(modifier, index) {
|
|
102
|
+
const emissive = modifier;
|
|
103
|
+
const suffix = `_${index}`;
|
|
104
|
+
let source = `uniform vec3 u_emissiveColor${suffix};\nuniform float u_emissiveStrength${suffix};\n`;
|
|
105
|
+
if (emissive.mask !== undefined)
|
|
106
|
+
source += `uniform sampler2D u_emissiveMask${suffix};\n`;
|
|
107
|
+
if (isEmissiveGated(emissive)) {
|
|
108
|
+
source += `uniform float u_emissiveFacingSign${suffix};\nuniform float u_emissiveFacingSoftness${suffix};\n`;
|
|
109
|
+
}
|
|
110
|
+
return source;
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
// A view-dependent Fresnel rim added to the shaded radiance at grazing angles. One program shape (no
|
|
114
|
+
// signature — power/intensity/bias are uniforms).
|
|
115
|
+
export const rimGlModifierSnippet = {
|
|
116
|
+
...rimModifierDefinition,
|
|
117
|
+
bind(modifier, context) {
|
|
118
|
+
const rim = modifier;
|
|
119
|
+
const gl = context.state.gl;
|
|
120
|
+
const suffix = `_${context.index}`;
|
|
121
|
+
unpackColorToLinear(scratchRgba, rim.color);
|
|
122
|
+
gl.uniform3f(gl.getUniformLocation(context.program, `u_rimColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
|
|
123
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_rimPower${suffix}`), rim.power ?? 3);
|
|
124
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_rimIntensity${suffix}`), rim.intensity ?? 1);
|
|
125
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_rimBias${suffix}`), rim.bias ?? 0);
|
|
126
|
+
},
|
|
127
|
+
contribution(_modifier, index) {
|
|
128
|
+
const suffix = `_${index}`;
|
|
129
|
+
return (`{\n` +
|
|
130
|
+
` float rim = clamp(u_rimBias${suffix} + u_rimIntensity${suffix} * pow(1.0 - max(dot(normal, viewDir), 0.0), max(u_rimPower${suffix}, 0.0001)), 0.0, 1.0);\n` +
|
|
131
|
+
` radiance += u_rimColor${suffix} * rim;\n` +
|
|
132
|
+
`}`);
|
|
133
|
+
},
|
|
134
|
+
declarations(_modifier, index) {
|
|
135
|
+
const suffix = `_${index}`;
|
|
136
|
+
return (`uniform vec3 u_rimColor${suffix};\n` +
|
|
137
|
+
`uniform float u_rimPower${suffix};\n` +
|
|
138
|
+
`uniform float u_rimIntensity${suffix};\n` +
|
|
139
|
+
`uniform float u_rimBias${suffix};\n`);
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
// A clip/burn dissolve of the shaded output, discarding fragments below a noise threshold and tinting
|
|
143
|
+
// the burn edge. Signature `` (procedural value noise over v_uv0) or `m` (sampled from a noise map).
|
|
144
|
+
export const dissolveGlModifierSnippet = {
|
|
145
|
+
...dissolveModifierDefinition,
|
|
146
|
+
bind(modifier, context) {
|
|
147
|
+
const dissolve = modifier;
|
|
148
|
+
const gl = context.state.gl;
|
|
149
|
+
const suffix = `_${context.index}`;
|
|
150
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_dissolveThreshold${suffix}`), dissolve.threshold);
|
|
151
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_dissolveEdgeWidth${suffix}`), dissolve.edgeWidth ?? 0.05);
|
|
152
|
+
unpackColorToLinear(scratchRgba, dissolve.edgeColor);
|
|
153
|
+
gl.uniform3f(gl.getUniformLocation(context.program, `u_dissolveEdgeColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
|
|
154
|
+
if (dissolve.map !== undefined)
|
|
155
|
+
bindGlModifierTexture(context, dissolve.map, `u_dissolveMap${suffix}`);
|
|
156
|
+
else
|
|
157
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_dissolveScale${suffix}`), dissolve.scale ?? 8);
|
|
158
|
+
},
|
|
159
|
+
contribution(modifier, index) {
|
|
160
|
+
const dissolve = modifier;
|
|
161
|
+
const suffix = `_${index}`;
|
|
162
|
+
const noise = dissolve.map !== undefined
|
|
163
|
+
? ` float dissolveNoise = texture(u_dissolveMap${suffix}, v_uv0).r;\n`
|
|
164
|
+
: ` float dissolveNoise = shadedValueNoise(v_uv0 * u_dissolveScale${suffix});\n`;
|
|
165
|
+
return (`{\n` +
|
|
166
|
+
noise +
|
|
167
|
+
` if (dissolveNoise < u_dissolveThreshold${suffix}) discard;\n` +
|
|
168
|
+
` float dissolveEdge = 1.0 - smoothstep(u_dissolveThreshold${suffix}, u_dissolveThreshold${suffix} + max(u_dissolveEdgeWidth${suffix}, 1e-4), dissolveNoise);\n` +
|
|
169
|
+
` radiance = mix(radiance, u_dissolveEdgeColor${suffix}, dissolveEdge);\n` +
|
|
170
|
+
`}`);
|
|
171
|
+
},
|
|
172
|
+
declarations(modifier, index) {
|
|
173
|
+
const dissolve = modifier;
|
|
174
|
+
const suffix = `_${index}`;
|
|
175
|
+
let source = `uniform float u_dissolveThreshold${suffix};\n` +
|
|
176
|
+
`uniform float u_dissolveEdgeWidth${suffix};\n` +
|
|
177
|
+
`uniform vec3 u_dissolveEdgeColor${suffix};\n`;
|
|
178
|
+
source +=
|
|
179
|
+
dissolve.map !== undefined
|
|
180
|
+
? `uniform sampler2D u_dissolveMap${suffix};\n`
|
|
181
|
+
: `uniform float u_dissolveScale${suffix};\n`;
|
|
182
|
+
return source;
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
// A view-dependent reflection of the scene's baked environment cubemap, Fresnel-blended into the
|
|
186
|
+
// shaded radiance. One program shape (all params are uniforms). It samples the SAME prefiltered
|
|
187
|
+
// environment (u_iblPrefiltered on the IBL unit) the lit block already binds, so it declares those
|
|
188
|
+
// shared uniforms itself — a scene without a baked environment leaves u_iblEnabled at 0 and the term
|
|
189
|
+
// falls back to the reflection tint.
|
|
190
|
+
export const envReflectGlModifierSnippet = {
|
|
191
|
+
...envReflectModifierDefinition,
|
|
192
|
+
bind(modifier, context) {
|
|
193
|
+
const reflect = modifier;
|
|
194
|
+
const gl = context.state.gl;
|
|
195
|
+
const suffix = `_${context.index}`;
|
|
196
|
+
unpackColorToLinear(scratchRgba, reflect.tint);
|
|
197
|
+
gl.uniform3f(gl.getUniformLocation(context.program, `u_envReflectTint${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
|
|
198
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_envReflectIntensity${suffix}`), reflect.intensity ?? 1);
|
|
199
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_envReflectFresnel${suffix}`), reflect.fresnelBias ?? 0.04);
|
|
200
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_envReflectRoughness${suffix}`), reflect.roughness ?? 0);
|
|
201
|
+
},
|
|
202
|
+
contribution(_modifier, index) {
|
|
203
|
+
const suffix = `_${index}`;
|
|
204
|
+
return (`{\n` +
|
|
205
|
+
` vec3 envReflectDir = reflect(-viewDir, normal);\n` +
|
|
206
|
+
` float envReflectMip = clamp(u_envReflectRoughness${suffix}, 0.0, 1.0) * max(u_iblMaxMip, 0.0);\n` +
|
|
207
|
+
` vec3 envReflectSample = u_iblEnabled > 0.5 ? textureLod(u_iblPrefiltered, envReflectDir, envReflectMip).rgb : u_envReflectTint${suffix};\n` +
|
|
208
|
+
` float envReflectFresnel = u_envReflectFresnel${suffix} + (1.0 - u_envReflectFresnel${suffix}) * pow(1.0 - max(dot(normal, viewDir), 0.0), 5.0);\n` +
|
|
209
|
+
` radiance += envReflectSample * u_envReflectTint${suffix} * (u_envReflectIntensity${suffix} * envReflectFresnel);\n` +
|
|
210
|
+
`}`);
|
|
211
|
+
},
|
|
212
|
+
declarations(_modifier, index) {
|
|
213
|
+
const suffix = `_${index}`;
|
|
214
|
+
return (`uniform samplerCube u_iblPrefiltered;\n` +
|
|
215
|
+
`uniform float u_iblEnabled;\n` +
|
|
216
|
+
`uniform float u_iblMaxMip;\n` +
|
|
217
|
+
`uniform vec3 u_envReflectTint${suffix};\n` +
|
|
218
|
+
`uniform float u_envReflectIntensity${suffix};\n` +
|
|
219
|
+
`uniform float u_envReflectFresnel${suffix};\n` +
|
|
220
|
+
`uniform float u_envReflectRoughness${suffix};\n`);
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
// A per-material distance fog blending the shaded output toward a color. Signature `l` (linear
|
|
224
|
+
// near/far ramp), `e` (exponential), `x` (exponential-squared) — each emits a different factor.
|
|
225
|
+
export const fogGlModifierSnippet = {
|
|
226
|
+
...fogModifierDefinition,
|
|
227
|
+
bind(modifier, context) {
|
|
228
|
+
const fog = modifier;
|
|
229
|
+
const gl = context.state.gl;
|
|
230
|
+
const suffix = `_${context.index}`;
|
|
231
|
+
unpackColorToLinear(scratchRgba, fog.color);
|
|
232
|
+
gl.uniform3f(gl.getUniformLocation(context.program, `u_fogColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
|
|
233
|
+
if (fog.mode === undefined || fog.mode === FogModifierMode.Linear) {
|
|
234
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_fogNear${suffix}`), fog.near ?? 0);
|
|
235
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_fogFar${suffix}`), fog.far ?? 1);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_fogDensity${suffix}`), fog.density ?? 1);
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
contribution(modifier, index) {
|
|
242
|
+
const fog = modifier;
|
|
243
|
+
const suffix = `_${index}`;
|
|
244
|
+
let factor;
|
|
245
|
+
if (fog.mode === FogModifierMode.Exponential) {
|
|
246
|
+
factor = ` float fogFactor = 1.0 - exp(-u_fogDensity${suffix} * fogDist);\n`;
|
|
247
|
+
}
|
|
248
|
+
else if (fog.mode === FogModifierMode.Exponential2) {
|
|
249
|
+
factor = ` float fogTerm = u_fogDensity${suffix} * fogDist;\n float fogFactor = 1.0 - exp(-fogTerm * fogTerm);\n`;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
factor = ` float fogFactor = clamp((fogDist - u_fogNear${suffix}) / max(u_fogFar${suffix} - u_fogNear${suffix}, 1e-4), 0.0, 1.0);\n`;
|
|
253
|
+
}
|
|
254
|
+
return (`{\n` +
|
|
255
|
+
` float fogDist = length(u_cameraPosition - v_worldPosition);\n` +
|
|
256
|
+
factor +
|
|
257
|
+
` radiance = mix(radiance, u_fogColor${suffix}, clamp(fogFactor, 0.0, 1.0));\n` +
|
|
258
|
+
`}`);
|
|
259
|
+
},
|
|
260
|
+
declarations(modifier, index) {
|
|
261
|
+
const fog = modifier;
|
|
262
|
+
const suffix = `_${index}`;
|
|
263
|
+
let source = `uniform vec3 u_fogColor${suffix};\n`;
|
|
264
|
+
source +=
|
|
265
|
+
fog.mode === undefined || fog.mode === FogModifierMode.Linear
|
|
266
|
+
? `uniform float u_fogNear${suffix};\nuniform float u_fogFar${suffix};\n`
|
|
267
|
+
: `uniform float u_fogDensity${suffix};\n`;
|
|
268
|
+
return source;
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
// Quantizes the shaded radiance into flat cel bands. One program shape (steps/smoothness are
|
|
272
|
+
// uniforms).
|
|
273
|
+
export const toonGlModifierSnippet = {
|
|
274
|
+
...toonModifierDefinition,
|
|
275
|
+
bind(modifier, context) {
|
|
276
|
+
const toon = modifier;
|
|
277
|
+
const gl = context.state.gl;
|
|
278
|
+
const suffix = `_${context.index}`;
|
|
279
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_toonSteps${suffix}`), Math.max(toon.steps, 2));
|
|
280
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_toonSmoothness${suffix}`), toon.smoothness ?? 0);
|
|
281
|
+
},
|
|
282
|
+
contribution(_modifier, index) {
|
|
283
|
+
const suffix = `_${index}`;
|
|
284
|
+
return (`{\n` +
|
|
285
|
+
` float toonLum = dot(radiance, vec3(0.2126, 0.7152, 0.0722));\n` +
|
|
286
|
+
` float toonSteps = max(u_toonSteps${suffix}, 2.0);\n` +
|
|
287
|
+
` float toonScaled = toonLum * toonSteps;\n` +
|
|
288
|
+
` float toonBand = floor(toonScaled);\n` +
|
|
289
|
+
` float toonFrac = toonScaled - toonBand;\n` +
|
|
290
|
+
` float toonSoft = max(u_toonSmoothness${suffix}, 1e-4);\n` +
|
|
291
|
+
` float toonQuant = (toonBand + smoothstep(0.5 - toonSoft, 0.5 + toonSoft, toonFrac)) / toonSteps;\n` +
|
|
292
|
+
` radiance *= toonLum > 1e-4 ? toonQuant / toonLum : 1.0;\n` +
|
|
293
|
+
`}`);
|
|
294
|
+
},
|
|
295
|
+
declarations(_modifier, index) {
|
|
296
|
+
const suffix = `_${index}`;
|
|
297
|
+
return `uniform float u_toonSteps${suffix};\nuniform float u_toonSmoothness${suffix};\n`;
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
// The one VERTEX-scene2d snippet: displaces the local vertex along its normal (or a fixed axis) before
|
|
301
|
+
// the model transform. Signature `s` (Sine procedural wave, animated by u_time) or `h` (HeightMap red
|
|
302
|
+
// channel), optionally `+a` when a fixed push axis replaces the surface normal.
|
|
303
|
+
export const vertexDisplaceGlModifierSnippet = {
|
|
304
|
+
...vertexDisplaceModifierDefinition,
|
|
305
|
+
bind(modifier, context) {
|
|
306
|
+
const displace = modifier;
|
|
307
|
+
const gl = context.state.gl;
|
|
308
|
+
const suffix = `_${context.index}`;
|
|
309
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_vDisplaceAmplitude${suffix}`), displace.amplitude);
|
|
310
|
+
if (displace.axis !== undefined) {
|
|
311
|
+
gl.uniform3f(gl.getUniformLocation(context.program, `u_vDisplaceAxis${suffix}`), displace.axis.x, displace.axis.y, displace.axis.z);
|
|
312
|
+
}
|
|
313
|
+
if (displace.source === VertexDisplaceModifierSource.HeightMap) {
|
|
314
|
+
if (displace.map !== undefined)
|
|
315
|
+
bindGlModifierTexture(context, displace.map, `u_vDisplaceMap${suffix}`);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_vDisplaceFrequency${suffix}`), displace.frequency ?? 1);
|
|
319
|
+
gl.uniform1f(gl.getUniformLocation(context.program, `u_vDisplaceSpeed${suffix}`), displace.speed ?? 1);
|
|
320
|
+
const dir = displace.direction ?? { x: 1, y: 0, z: 0 };
|
|
321
|
+
gl.uniform3f(gl.getUniformLocation(context.program, `u_vDisplaceDir${suffix}`), dir.x, dir.y, dir.z);
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
contribution(modifier, index) {
|
|
325
|
+
const displace = modifier;
|
|
326
|
+
const suffix = `_${index}`;
|
|
327
|
+
const axis = displace.axis !== undefined
|
|
328
|
+
? ` vec3 vDisplaceAxis = normalize(u_vDisplaceAxis${suffix});\n`
|
|
329
|
+
: ` vec3 vDisplaceAxis = normalize(localNormal);\n`;
|
|
330
|
+
const amount = displace.source === VertexDisplaceModifierSource.HeightMap
|
|
331
|
+
? ` float vDisplaceAmount = texture(u_vDisplaceMap${suffix}, vertexUv).r * u_vDisplaceAmplitude${suffix};\n`
|
|
332
|
+
: ` float vDisplacePhase = dot(localPosition.xyz, normalize(u_vDisplaceDir${suffix})) * u_vDisplaceFrequency${suffix} + u_time * u_vDisplaceSpeed${suffix};\n float vDisplaceAmount = sin(vDisplacePhase) * u_vDisplaceAmplitude${suffix};\n`;
|
|
333
|
+
return `{\n` + axis + amount + ` localPosition.xyz += vDisplaceAxis * vDisplaceAmount;\n` + `}`;
|
|
334
|
+
},
|
|
335
|
+
declarations(modifier, index) {
|
|
336
|
+
const displace = modifier;
|
|
337
|
+
const suffix = `_${index}`;
|
|
338
|
+
let source = `uniform float u_vDisplaceAmplitude${suffix};\n`;
|
|
339
|
+
if (displace.axis !== undefined)
|
|
340
|
+
source += `uniform vec3 u_vDisplaceAxis${suffix};\n`;
|
|
341
|
+
source +=
|
|
342
|
+
displace.source === VertexDisplaceModifierSource.HeightMap
|
|
343
|
+
? `uniform sampler2D u_vDisplaceMap${suffix};\n`
|
|
344
|
+
: `uniform float u_vDisplaceFrequency${suffix};\nuniform float u_vDisplaceSpeed${suffix};\nuniform vec3 u_vDisplaceDir${suffix};\n`;
|
|
345
|
+
return source;
|
|
346
|
+
},
|
|
347
|
+
};
|
|
348
|
+
// Registers the three built-in GL modifier snippets on this state. Opt-in (no top-level side effect)
|
|
349
|
+
// and separate from registerShadedGlMaterial so a plain ShadedMaterial pays nothing for modifier
|
|
350
|
+
// snippets it does not use — a caller registers this once alongside any vendor-prefixed snippets
|
|
351
|
+
// before drawing a ShadedMaterial that carries modifiers.
|
|
352
|
+
export function registerBuiltInGlModifierSnippets(state) {
|
|
353
|
+
registerGlModifierSnippet(state, animatedNormalGlModifierSnippet);
|
|
354
|
+
registerGlModifierSnippet(state, dissolveGlModifierSnippet);
|
|
355
|
+
registerGlModifierSnippet(state, emissiveGlModifierSnippet);
|
|
356
|
+
registerGlModifierSnippet(state, envReflectGlModifierSnippet);
|
|
357
|
+
registerGlModifierSnippet(state, fogGlModifierSnippet);
|
|
358
|
+
registerGlModifierSnippet(state, rimGlModifierSnippet);
|
|
359
|
+
registerGlModifierSnippet(state, toonGlModifierSnippet);
|
|
360
|
+
registerGlModifierSnippet(state, vertexDisplaceGlModifierSnippet);
|
|
361
|
+
}
|
|
362
|
+
// Binds a modifier's texture on the next free modifier texture unit and points its sampler uniform at
|
|
363
|
+
// it. Mirrors the base material's texture bind (activeTexture → bindGlImageResourceTexture → uniform1i). A texture
|
|
364
|
+
// with no loaded source leaves the sampler on that unit without an upload (the modifier renders as if
|
|
365
|
+
// unmapped) rather than clobbering a base or shadow unit. When the allocator is exhausted (returns
|
|
366
|
+
// -1), the sampler is left untouched — the excess modifier texture is dropped rather than binding
|
|
367
|
+
// onto the shadow/IBL units.
|
|
368
|
+
function bindGlModifierTexture(context, texture, uniformName) {
|
|
369
|
+
const state = context.state;
|
|
370
|
+
const gl = state.gl;
|
|
371
|
+
const unit = context.acquireModifierTextureUnit();
|
|
372
|
+
if (unit < 0)
|
|
373
|
+
return;
|
|
374
|
+
gl.activeTexture(gl.TEXTURE0 + unit);
|
|
375
|
+
const image = texture.image;
|
|
376
|
+
if (image !== null && hasImageResourcePixels(image)) {
|
|
377
|
+
bindGlImageResourceTexture(state, image, texture.sampler);
|
|
378
|
+
}
|
|
379
|
+
gl.uniform1i(gl.getUniformLocation(context.program, uniformName), unit);
|
|
380
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
381
|
+
}
|
|
382
|
+
function isEmissiveGated(modifier) {
|
|
383
|
+
return modifier.facing !== undefined && modifier.facing !== EmissiveModifierFacing.Ignore;
|
|
384
|
+
}
|
|
385
|
+
const scratchRgba = [0, 0, 0, 0];
|
|
386
|
+
//# sourceMappingURL=glShadedBuiltInModifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glShadedBuiltInModifiers.js","sourceRoot":"","sources":["../src/glShadedBuiltInModifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,gCAAgC,EAChC,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,mBAAmB,CAAC;AAiB3B,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,+FAA+F;AAC/F,gGAAgG;AAChG,uFAAuF;AACvF,mGAAmG;AACnG,iGAAiG;AACjG,mGAAmG;AACnG,oGAAoG;AACpG,8FAA8F;AAC9F,wFAAwF;AAExF,mGAAmG;AACnG,8CAA8C;AAC9C,MAAM,CAAC,MAAM,+BAA+B,GAAsB;IAChE,GAAG,gCAAgC;IACnC,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,QAAQ,GAAG,QAA4C,CAAC;QAC9D,IAAI,QAAQ,CAAC,GAAG,KAAK,IAAI;YAAE,OAAO;QAClC,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,kBAAkB,MAAM,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACxG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;QAC9G,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACxC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,EAAE,mBAAmB,MAAM,EAAE,CAAC,CAAC;YACnF,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,IAAI,MAAM,CAAC;YACrD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QACjH,CAAC;IACH,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAA4C,CAAC;QAC9D,IAAI,QAAQ,CAAC,GAAG,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,GACR,QAAQ,CAAC,YAAY,KAAK,SAAS;YACjC,CAAC,CAAC,2CAA2C,MAAM,gCAAgC,MAAM,+BAA+B;YACxH,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,CACL,KAAK;YACL,8CAA8C,MAAM,+BAA+B,MAAM,+BAA+B;YACxH,IAAI;YACJ,0CAA0C,MAAM,KAAK;YACrD,2CAA2C;YAC3C,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAA4C,CAAC;QAC9D,IAAI,QAAQ,CAAC,GAAG,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM,GACR,oCAAoC,MAAM,KAAK;YAC/C,kCAAkC,MAAM,KAAK;YAC7C,qCAAqC,MAAM,KAAK,CAAC;QACnD,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,qCAAqC,MAAM,sCAAsC,MAAM,KAAK,CAAC;QACzG,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,kGAAkG;AAClG,iGAAiG;AACjG,wBAAwB;AACxB,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,GAAG,0BAA0B;IAC7B,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,QAAQ,GAAG,QAAsC,CAAC;QACxD,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjD,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,MAAM,EAAE,CAAC,EAClE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvG,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,MAAM,EAAE,CAAC,CAAC;QAC1G,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5F,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,2BAA2B,MAAM,EAAE,CAAC,EAC3E,QAAQ,CAAC,cAAc,IAAI,CAAC,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAAsC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,KAAK,GAAG,wCAAwC,MAAM,wBAAwB,MAAM,KAAK,CAAC;QACrG,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,IAAI,2CAA2C,MAAM,iBAAiB,CAAC;QAC5G,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,IAAI;gBACF,6GAA6G;oBAC7G,gFAAgF,MAAM,KAAK;oBAC3F,sDAAsD,MAAM,YAAY;oBACxE,8EAA8E,CAAC;QACnF,CAAC;QACD,IAAI,IAAI,gCAAgC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAAsC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM,GAAG,+BAA+B,MAAM,sCAAsC,MAAM,KAAK,CAAC;QACpG,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,mCAAmC,MAAM,KAAK,CAAC;QAC1F,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,qCAAqC,MAAM,4CAA4C,MAAM,KAAK,CAAC;QAC/G,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,qGAAqG;AACrG,kDAAkD;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,GAAG,qBAAqB;IACxB,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,GAAG,GAAG,QAAiC,CAAC;QAC9C,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,MAAM,EAAE,CAAC,EAC7D,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAC5F,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACpG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,YAAY,CAAC,SAA6B,EAAE,KAAa;QACvD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CACL,KAAK;YACL,gCAAgC,MAAM,oBAAoB,MAAM,8DAA8D,MAAM,0BAA0B;YAC9J,2BAA2B,MAAM,WAAW;YAC5C,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,SAA6B,EAAE,KAAa;QACvD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CACL,0BAA0B,MAAM,KAAK;YACrC,2BAA2B,MAAM,KAAK;YACtC,+BAA+B,MAAM,KAAK;YAC1C,0BAA0B,MAAM,KAAK,CACtC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,sGAAsG;AACtG,qGAAqG;AACrG,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,GAAG,0BAA0B;IAC7B,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,QAAQ,GAAG,QAAsC,CAAC;QACxD,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACjH,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrD,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,MAAM,EAAE,CAAC,EACtE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QACF,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS;YAAE,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,gBAAgB,MAAM,EAAE,CAAC,CAAC;;YAClG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAAsC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GACT,QAAQ,CAAC,GAAG,KAAK,SAAS;YACxB,CAAC,CAAC,gDAAgD,MAAM,eAAe;YACvE,CAAC,CAAC,mEAAmE,MAAM,MAAM,CAAC;QACtF,OAAO,CACL,KAAK;YACL,KAAK;YACL,4CAA4C,MAAM,cAAc;YAChE,8DAA8D,MAAM,wBAAwB,MAAM,6BAA6B,MAAM,4BAA4B;YACjK,iDAAiD,MAAM,oBAAoB;YAC3E,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAAsC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM,GACR,oCAAoC,MAAM,KAAK;YAC/C,oCAAoC,MAAM,KAAK;YAC/C,mCAAmC,MAAM,KAAK,CAAC;QACjD,MAAM;YACJ,QAAQ,CAAC,GAAG,KAAK,SAAS;gBACxB,CAAC,CAAC,kCAAkC,MAAM,KAAK;gBAC/C,CAAC,CAAC,gCAAgC,MAAM,KAAK,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,iGAAiG;AACjG,gGAAgG;AAChG,mGAAmG;AACnG,qGAAqG;AACrG,qCAAqC;AACrC,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC5D,GAAG,4BAA4B;IAC/B,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,OAAO,GAAG,QAAwC,CAAC;QACzD,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,MAAM,EAAE,CAAC,EACnE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,wBAAwB,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QAC/G,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QAClH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,wBAAwB,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IACjH,CAAC;IACD,YAAY,CAAC,SAA6B,EAAE,KAAa;QACvD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CACL,KAAK;YACL,qDAAqD;YACrD,sDAAsD,MAAM,wCAAwC;YACpG,mIAAmI,MAAM,KAAK;YAC9I,kDAAkD,MAAM,gCAAgC,MAAM,uDAAuD;YACrJ,oDAAoD,MAAM,4BAA4B,MAAM,0BAA0B;YACtH,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,SAA6B,EAAE,KAAa;QACvD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CACL,yCAAyC;YACzC,+BAA+B;YAC/B,8BAA8B;YAC9B,gCAAgC,MAAM,KAAK;YAC3C,sCAAsC,MAAM,KAAK;YACjD,oCAAoC,MAAM,KAAK;YAC/C,sCAAsC,MAAM,KAAK,CAClD,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,+FAA+F;AAC/F,gGAAgG;AAChG,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,GAAG,qBAAqB;IACxB,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,GAAG,GAAG,QAAiC,CAAC;QAC9C,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,MAAM,EAAE,CAAC,EAC7D,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;YAClE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAC1F,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,GAAG,GAAG,QAAiC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAc,CAAC;QACnB,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,GAAG,8CAA8C,MAAM,gBAAgB,CAAC;QAChF,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,YAAY,EAAE,CAAC;YACrD,MAAM,GAAG,iCAAiC,MAAM,mEAAmE,CAAC;QACtH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,iDAAiD,MAAM,mBAAmB,MAAM,eAAe,MAAM,uBAAuB,CAAC;QACxI,CAAC;QACD,OAAO,CACL,KAAK;YACL,iEAAiE;YACjE,MAAM;YACN,wCAAwC,MAAM,kCAAkC;YAChF,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,GAAG,GAAG,QAAiC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM,GAAG,0BAA0B,MAAM,KAAK,CAAC;QACnD,MAAM;YACJ,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM;gBAC3D,CAAC,CAAC,0BAA0B,MAAM,4BAA4B,MAAM,KAAK;gBACzE,CAAC,CAAC,6BAA6B,MAAM,KAAK,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,6FAA6F;AAC7F,aAAa;AACb,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,GAAG,sBAAsB;IACzB,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,IAAI,GAAG,QAAkC,CAAC;QAChD,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACtG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IAC1G,CAAC;IACD,YAAY,CAAC,SAA6B,EAAE,KAAa;QACvD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CACL,KAAK;YACL,kEAAkE;YAClE,sCAAsC,MAAM,WAAW;YACvD,6CAA6C;YAC7C,yCAAyC;YACzC,6CAA6C;YAC7C,0CAA0C,MAAM,YAAY;YAC5D,sGAAsG;YACtG,6DAA6D;YAC7D,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,SAA6B,EAAE,KAAa;QACvD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,4BAA4B,MAAM,oCAAoC,MAAM,KAAK,CAAC;IAC3F,CAAC;CACF,CAAC;AAEF,uGAAuG;AACvG,sGAAsG;AACtG,gFAAgF;AAChF,MAAM,CAAC,MAAM,+BAA+B,GAAsB;IAChE,GAAG,gCAAgC;IACnC,IAAI,CAAC,QAA4B,EAAE,OAAwC;QACzE,MAAM,QAAQ,GAAG,QAA4C,CAAC;QAC9D,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1G,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,MAAM,EAAE,CAAC,EAClE,QAAQ,CAAC,IAAI,CAAC,CAAC,EACf,QAAQ,CAAC,IAAI,CAAC,CAAC,EACf,QAAQ,CAAC,IAAI,CAAC,CAAC,CAChB,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,4BAA4B,CAAC,SAAS,EAAE,CAAC;YAC/D,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS;gBAAE,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;YAC/G,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACvG,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACvD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAA4C,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,GACR,QAAQ,CAAC,IAAI,KAAK,SAAS;YACzB,CAAC,CAAC,mDAAmD,MAAM,MAAM;YACjE,CAAC,CAAC,kDAAkD,CAAC;QACzD,MAAM,MAAM,GACV,QAAQ,CAAC,MAAM,KAAK,4BAA4B,CAAC,SAAS;YACxD,CAAC,CAAC,mDAAmD,MAAM,uCAAuC,MAAM,KAAK;YAC7G,CAAC,CAAC,2EAA2E,MAAM,4BAA4B,MAAM,+BAA+B,MAAM,0EAA0E,MAAM,KAAK,CAAC;QACpP,OAAO,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,2DAA2D,GAAG,GAAG,CAAC;IACnG,CAAC;IACD,YAAY,CAAC,QAA4B,EAAE,KAAa;QACtD,MAAM,QAAQ,GAAG,QAA4C,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM,GAAG,qCAAqC,MAAM,KAAK,CAAC;QAC9D,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,+BAA+B,MAAM,KAAK,CAAC;QACtF,MAAM;YACJ,QAAQ,CAAC,MAAM,KAAK,4BAA4B,CAAC,SAAS;gBACxD,CAAC,CAAC,mCAAmC,MAAM,KAAK;gBAChD,CAAC,CAAC,qCAAqC,MAAM,oCAAoC,MAAM,iCAAiC,MAAM,KAAK,CAAC;QACxI,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,qGAAqG;AACrG,iGAAiG;AACjG,iGAAiG;AACjG,0DAA0D;AAC1D,MAAM,UAAU,iCAAiC,CAAC,KAAoB;IACpE,yBAAyB,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;IAClE,yBAAyB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;IAC5D,yBAAyB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;IAC5D,yBAAyB,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;IAC9D,yBAAyB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACvD,yBAAyB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACvD,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACxD,yBAAyB,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;AACpE,CAAC;AAED,sGAAsG;AACtG,mHAAmH;AACnH,sGAAsG;AACtG,mGAAmG;AACnG,kGAAkG;AAClG,6BAA6B;AAC7B,SAAS,qBAAqB,CAC5B,OAAwC,EACxC,OAA0B,EAC1B,WAAmB;IAEnB,MAAM,KAAK,GAAkB,OAAO,CAAC,KAAK,CAAC;IAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,MAAM,IAAI,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAClD,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO;IACrB,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IACxE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,QAAoC;IAC3D,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,sBAAsB,CAAC,MAAM,CAAC;AAC5F,CAAC;AAED,MAAM,WAAW,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlModifierSnippet, GlRenderState, ModifierKind } from '@flighthq/types';
|
|
2
|
+
export declare function registerGlModifierSnippet(state: GlRenderState, snippet: Readonly<GlModifierSnippet>): void;
|
|
3
|
+
export declare function resolveGlModifierSnippet(state: GlRenderState, kind: ModifierKind): GlModifierSnippet | null;
|
|
4
|
+
//# sourceMappingURL=glShadedModifierSnippet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glShadedModifierSnippet.d.ts","sourceRoot":"","sources":["../src/glShadedModifierSnippet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAStF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAI1G;AAKD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,iBAAiB,GAAG,IAAI,CAI3G"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createModifierRegistry, registerModifier, resolveModifier } from '@flighthq/shading';
|
|
2
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
3
|
+
// Registers (or replaces) the GL snippet for a modifier kind on this state's scene runtime. Opt-in
|
|
4
|
+
// and last-write-wins (a vendor-prefixed kind, or an override of a built-in, wins). Unregistered
|
|
5
|
+
// kinds contribute no GLSL, so a ShadedMaterial whose modifier has no snippet renders as if that
|
|
6
|
+
// modifier were absent. Register the three built-ins with registerBuiltInGlModifierSnippets. Lazily
|
|
7
|
+
// allocates the modifier registry on first use so a PBR/classic-only scene-gl consumer that never
|
|
8
|
+
// registers a snippet pays nothing for the shading tier.
|
|
9
|
+
export function registerGlModifierSnippet(state, snippet) {
|
|
10
|
+
const runtime = getGlScene3DRuntime(state);
|
|
11
|
+
if (runtime.modifierSnippetRegistry === null)
|
|
12
|
+
runtime.modifierSnippetRegistry = createModifierRegistry();
|
|
13
|
+
registerModifier(runtime.modifierSnippetRegistry, snippet);
|
|
14
|
+
}
|
|
15
|
+
// Returns the GL snippet registered for a modifier kind on this state, or null when none is (including
|
|
16
|
+
// when no snippet has ever been registered, so the registry is still unallocated) — the expected-miss
|
|
17
|
+
// sentinel the compile path checks before injecting an unknown kind.
|
|
18
|
+
export function resolveGlModifierSnippet(state, kind) {
|
|
19
|
+
const registry = getGlScene3DRuntime(state).modifierSnippetRegistry;
|
|
20
|
+
if (registry === null)
|
|
21
|
+
return null;
|
|
22
|
+
return resolveModifier(registry, kind);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=glShadedModifierSnippet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glShadedModifierSnippet.js","sourceRoot":"","sources":["../src/glShadedModifierSnippet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,mGAAmG;AACnG,iGAAiG;AACjG,iGAAiG;AACjG,oGAAoG;AACpG,kGAAkG;AAClG,yDAAyD;AACzD,MAAM,UAAU,yBAAyB,CAAC,KAAoB,EAAE,OAAoC;IAClG,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,uBAAuB,KAAK,IAAI;QAAE,OAAO,CAAC,uBAAuB,GAAG,sBAAsB,EAAE,CAAC;IACzG,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED,uGAAuG;AACvG,sGAAsG;AACtG,qEAAqE;AACrE,MAAM,UAAU,wBAAwB,CAAC,KAAoB,EAAE,IAAkB;IAC/E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;IACpE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,eAAe,CAAC,QAAQ,EAAE,IAAI,CAA6B,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { GlShadedDefineKey, GlShadedProgram, ModifierRegistry, GlRenderState, Modifier } from '@flighthq/types';
|
|
2
|
+
export declare function buildGlShadedCacheKey(key: Readonly<GlShadedDefineKey>, modifierDefineKey: string): string;
|
|
3
|
+
export declare function compileGlShadedProgram(gl: WebGL2RenderingContext, key: Readonly<GlShadedDefineKey>, orderedModifiers: readonly Modifier[], registry: Readonly<ModifierRegistry>): GlShadedProgram;
|
|
4
|
+
export declare function ensureGlShadedProgram(state: GlRenderState, key: Readonly<GlShadedDefineKey>, modifiers: readonly Modifier[]): GlShadedProgram;
|
|
5
|
+
//# sourceMappingURL=glShadedPrelude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glShadedPrelude.d.ts","sourceRoot":"","sources":["../src/glShadedPrelude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,QAAQ,EAET,MAAM,iBAAiB,CAAC;AAgBzB,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAKzG;AAOD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,sBAAsB,EAC1B,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAChC,gBAAgB,EAAE,SAAS,QAAQ,EAAE,EACrC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACnC,eAAe,CA4BjB;AAOD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAChC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,eAAe,CAcjB"}
|