@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 @@
|
|
|
1
|
+
{"version":3,"file":"glMeshProgram.js","sourceRoot":"","sources":["../src/glMeshProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAW9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,qGAAqG;AACrG,qGAAqG;AACrG,qGAAqG;AACrG,mGAAmG;AACnG,+FAA+F;AAC/F,gGAAgG;AAChG,MAAM,UAAU,eAAe,CAAC,KAAoB,EAAE,OAAgC,EAAE,WAAoB;IAC1G,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,mBAAmB,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,OAAO,CAAC;IACvD,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACzB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACtB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEnB,IAAI,WAAW,EAAE,CAAC;QAChB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACxB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,qGAAqG;AACrG,sGAAsG;AACtG,qGAAqG;AACrG,qGAAqG;AACrG,sFAAsF;AACtF,gCAAgC;AAChC,MAAM,UAAU,iBAAiB,CAC/B,EAA0B,EAC1B,OAAgC,EAChC,OAAoD;IAEpD,IAAI,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC7D,OAAyB,CAAC,cAAc,GAAG,GAAG,CAAC;IAClD,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO;IAC7C,kBAAkB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,8FAA8F;AAC9F,iGAAiG;AACjG,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAC9B,EAA0B,EAC1B,YAAoB,EACpB,cAAsB;IAEtB,OAAO,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,qGAAqG;AACrG,kGAAkG;AAClG,sGAAsG;AACtG,wFAAwF;AACxF,MAAM,UAAU,oBAAoB,CAAC,KAAoB,EAAE,OAAgC;IACzF,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,qGAAqG;AACrG,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,OAAgC,EAChC,KAAmC,EACnC,QAAgC;IAEhC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI;QAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEhH,gGAAgG;IAChG,qGAAqG;IACrG,oGAAoG;IACpG,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC5C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,cAAc,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACxE,OAAyB,CAAC,cAAc,GAAG,cAAc,CAAC;IAC7D,CAAC;IACD,IAAI,cAAc,KAAK,IAAI;QAAE,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAE5E,sGAAsG;IACtG,uGAAuG;IACvG,wGAAwG;IACxG,wGAAwG;IACxG,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,GAAG,yBAAyB,CAAC,CAAC;QAC1D,0BAA0B,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC;IACnE,CAAC;IAED,kGAAkG;IAClG,+FAA+F;IAC/F,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC;IAC/G,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,qGAAqG;AACrG,sGAAsG;AACtG,sGAAsG;AACtG,mFAAmF;AACnF,MAAM,UAAU,sBAAsB,CACpC,KAAoB,EACpB,GAAW,EACX,OAA0C;IAE1C,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,OAAY,CAAC;AACtB,CAAC;AAED,iGAAiG;AACjG,iGAAiG;AACjG,uGAAuG;AACvG,uFAAuF;AACvF,MAAM,UAAU,gBAAgB,CAAC,OAAoD;IACnF,OAAO,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACjH,CAAC;AAED,mGAAmG;AACnG,gGAAgG;AAChG,oFAAoF;AACpF,MAAM,UAAU,uBAAuB,CACrC,EAA0B,EAC1B,iBAA8C,EAC9C,MAA0B;IAE1B,cAAc,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,kBAAkB,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAC9D,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC7G,CAAC;AAED,mGAAmG;AACnG,sGAAsG;AACtG,mDAAmD;AACnD,MAAM,UAAU,uBAAuB,CACrC,EAA0B,EAC1B,iBAA8C,EAC9C,MAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,gCAAgC,CAAC,qBAAqB,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,EAAE,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,uGAAuG;AACvG,qGAAqG;AACrG,wGAAwG;AACxG,wGAAwG;AACxG,sGAAsG;AACtG,8EAA8E;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;CAO1C,CAAC;AAEF,wGAAwG;AACxG,0GAA0G;AAC1G,8FAA8F;AAC9F,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,0GAA0G;AAC1G,wGAAwG;AACxG,yGAAyG;AACzG,uGAAuG;AACvG,oGAAoG;AACpG,uGAAuG;AACvG,0GAA0G;AAC1G,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB/C,CAAC;AAEF,MAAM,qBAAqB,GAAG,aAAa,EAAE,CAAC;AAC9C,MAAM,kBAAkB,GAAG,aAAa,EAAE,CAAC;AAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnD,sFAAsF;AACtF,yDAAyD;AACzD,MAAM,eAAe,GAAG,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlRenderState, MeshGeometry, GlMeshUpload } from '@flighthq/types';
|
|
2
|
+
export declare function destroyGlMeshUpload(state: GlRenderState, upload: Readonly<GlMeshUpload>): void;
|
|
3
|
+
export declare function ensureGlMeshUpload(state: GlRenderState, geometry: Readonly<MeshGeometry>, gpuSkinned?: boolean): GlMeshUpload;
|
|
4
|
+
//# sourceMappingURL=glMeshUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glMeshUpload.d.ts","sourceRoot":"","sources":["../src/glMeshUpload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAIZ,YAAY,EACb,MAAM,iBAAiB,CAAC;AAQzB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAK9F;AAyBD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAChC,UAAU,UAAQ,GACjB,YAAY,CAgEd"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { getMeshGeometryMorphBindPose, getMeshGeometrySkinBindPose } from '@flighthq/mesh';
|
|
2
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
3
|
+
// Frees the GL objects owned by a mesh upload — the VAO and the vertex/index buffers. The upload
|
|
4
|
+
// must not be used after this call. The upload cache is a WeakMap keyed by the geometry entity, so
|
|
5
|
+
// its entry falls away on its own once the geometry is GC'd; this frees the GPU resources now rather
|
|
6
|
+
// than waiting for context loss. Deleting an already-deleted GL object is a silent no-op.
|
|
7
|
+
export function destroyGlMeshUpload(state, upload) {
|
|
8
|
+
const gl = state.gl;
|
|
9
|
+
gl.deleteVertexArray(upload.vao);
|
|
10
|
+
gl.deleteBuffer(upload.vertexBuffer);
|
|
11
|
+
if (upload.indexBuffer !== null)
|
|
12
|
+
gl.deleteBuffer(upload.indexBuffer);
|
|
13
|
+
}
|
|
14
|
+
// Lazily uploads a MeshGeometry's interleaved vertex buffer + index buffer into a VAO for this
|
|
15
|
+
// GlRenderState, caching the result keyed by the geometry entity (the per-state parallel of
|
|
16
|
+
// MeshGeometryRuntime.webglData). Re-uploads when geometry.version moves past the cached version,
|
|
17
|
+
// reusing the existing GL objects. The VAO binds only the canonical PBR attributes the shader
|
|
18
|
+
// consumes (position/normal/tangent/uv0), read from geometry.layout so a custom-offset layout still
|
|
19
|
+
// works. Leaves the VAO bound on return (the draw path issues its draws immediately after).
|
|
20
|
+
//
|
|
21
|
+
// `gpuSkinned` is true when the caller will GPU-skin this geometry (the HAS_SKIN shader deforms it via
|
|
22
|
+
// the joint palette). In that case the uploaded buffer is the STATIC bind pose — position/normal
|
|
23
|
+
// restored from the captured skin bind pose rather than the per-frame CPU-posed geometry.vertices that
|
|
24
|
+
// updateMeshSkin writes — so the GPU deforms bind → pose exactly once, never double-skinning on top of a
|
|
25
|
+
// CPU pose. The bind buffer is uploaded once and reused across frames (its version is ignored while
|
|
26
|
+
// skinBindUploaded). Without a captured bind pose, geometry.vertices IS the bind pose, so it uploads
|
|
27
|
+
// as-is. A rigid draw (not gpuSkinned) always uploads geometry.vertices — for an oversized skeleton that
|
|
28
|
+
// falls back to CPU skinning, those are exactly the CPU-posed vertices it must draw.
|
|
29
|
+
//
|
|
30
|
+
// MORPH + SKIN COMPOSE ON GPU: when the geometry is also morphed (its morph bind pose is captured), the
|
|
31
|
+
// static-bind-pose restore + freeze is skipped. prepareScene3DMorph has blended this frame's morph into
|
|
32
|
+
// geometry.vertices (position/normal, leaving joints0/weights0 intact), so those ARE the bind input the
|
|
33
|
+
// shader must skin — restoring the frozen skin bind pose would discard the morph, and freezing would
|
|
34
|
+
// pin the buffer at frame 0. Instead geometry.vertices uploads as-is, version-tracked, so each morph
|
|
35
|
+
// frame re-uploads and the GPU skins the freshly-morphed bind. (There is no CPU double-skin to guard
|
|
36
|
+
// against here: the composed GPU path runs prepareScene3DMorph, never the CPU updateMeshSkin.)
|
|
37
|
+
export function ensureGlMeshUpload(state, geometry, gpuSkinned = false) {
|
|
38
|
+
const gl = state.gl;
|
|
39
|
+
const cache = getGlScene3DRuntime(state).uploadCache;
|
|
40
|
+
let upload = cache.get(geometry);
|
|
41
|
+
const primitiveMode = getGlPrimitiveMode(gl, geometry.topology);
|
|
42
|
+
// A morphed geometry's vertices are the per-frame morphed bind input the GPU skins directly, so the
|
|
43
|
+
// static skin-bind restore/freeze must not apply — the morph would be frozen out otherwise.
|
|
44
|
+
const morphed = getMeshGeometryMorphBindPose(geometry) !== null;
|
|
45
|
+
const bindPose = gpuSkinned && !morphed ? getMeshGeometrySkinBindPose(geometry) : null;
|
|
46
|
+
if (upload !== undefined &&
|
|
47
|
+
(bindPose !== null ? upload.skinBindUploaded === true : upload.version === geometry.version)) {
|
|
48
|
+
upload.primitiveMode = primitiveMode;
|
|
49
|
+
gl.bindVertexArray(upload.vao);
|
|
50
|
+
return upload;
|
|
51
|
+
}
|
|
52
|
+
if (upload === undefined) {
|
|
53
|
+
upload = {
|
|
54
|
+
indexBuffer: null,
|
|
55
|
+
indexCount: 0,
|
|
56
|
+
indexType: gl.UNSIGNED_SHORT,
|
|
57
|
+
primitiveMode,
|
|
58
|
+
vao: gl.createVertexArray(),
|
|
59
|
+
version: -1,
|
|
60
|
+
vertexBuffer: gl.createBuffer(),
|
|
61
|
+
};
|
|
62
|
+
cache.set(geometry, upload);
|
|
63
|
+
}
|
|
64
|
+
gl.bindVertexArray(upload.vao);
|
|
65
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, upload.vertexBuffer);
|
|
66
|
+
gl.bufferData(gl.ARRAY_BUFFER, bindPose !== null ? buildSkinBindVertices(geometry, bindPose) : geometry.vertices, gl.STATIC_DRAW);
|
|
67
|
+
upload.skinBindUploaded = bindPose !== null;
|
|
68
|
+
const stride = geometry.layout.stride;
|
|
69
|
+
for (let i = 0; i < geometry.layout.attributes.length; i++) {
|
|
70
|
+
bindGlVertexAttribute(gl, geometry.layout.attributes[i], stride);
|
|
71
|
+
}
|
|
72
|
+
if (geometry.indices !== null) {
|
|
73
|
+
if (upload.indexBuffer === null)
|
|
74
|
+
upload.indexBuffer = gl.createBuffer();
|
|
75
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, upload.indexBuffer);
|
|
76
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, geometry.indices, gl.STATIC_DRAW);
|
|
77
|
+
upload.indexType = geometry.indices instanceof Uint32Array ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT;
|
|
78
|
+
upload.indexCount = geometry.indices.length;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
if (upload.indexBuffer !== null)
|
|
82
|
+
gl.deleteBuffer(upload.indexBuffer);
|
|
83
|
+
upload.indexBuffer = null;
|
|
84
|
+
upload.indexCount =
|
|
85
|
+
geometry.layout.stride > 0 ? Math.floor(geometry.vertices.byteLength / geometry.layout.stride) : 0;
|
|
86
|
+
}
|
|
87
|
+
upload.primitiveMode = primitiveMode;
|
|
88
|
+
upload.version = geometry.version;
|
|
89
|
+
return upload;
|
|
90
|
+
}
|
|
91
|
+
function getGlPrimitiveMode(gl, topology) {
|
|
92
|
+
switch (topology) {
|
|
93
|
+
case 'line-list':
|
|
94
|
+
return gl.LINES;
|
|
95
|
+
case 'line-strip':
|
|
96
|
+
return gl.LINE_STRIP;
|
|
97
|
+
case 'point-list':
|
|
98
|
+
return gl.POINTS;
|
|
99
|
+
case 'triangle-strip':
|
|
100
|
+
return gl.TRIANGLE_STRIP;
|
|
101
|
+
default:
|
|
102
|
+
return gl.TRIANGLES;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Builds the STATIC bind-pose vertex buffer a GPU-skinned mesh uploads: a copy of the interleaved
|
|
106
|
+
// buffer with position and normal restored from the captured skin bind pose. tangent/uv0/joints0/
|
|
107
|
+
// weights0 are already static (updateMeshSkin rewrites only position/normal), so copying them straight
|
|
108
|
+
// from geometry.vertices is correct. The GPU deforms this fixed buffer through the joint palette.
|
|
109
|
+
function buildSkinBindVertices(geometry, bindPose) {
|
|
110
|
+
const out = geometry.vertices.slice();
|
|
111
|
+
const floatsPerVertex = geometry.layout.stride / 4;
|
|
112
|
+
const positionOffset = floatOffsetForSemantic(geometry, 'position');
|
|
113
|
+
const normalOffset = floatOffsetForSemantic(geometry, 'normal');
|
|
114
|
+
const { normals, positions } = bindPose;
|
|
115
|
+
const vertexCount = (positions.length / 3) | 0;
|
|
116
|
+
for (let v = 0; v < vertexCount; v++) {
|
|
117
|
+
const base = v * floatsPerVertex;
|
|
118
|
+
const s = v * 3;
|
|
119
|
+
if (positionOffset >= 0) {
|
|
120
|
+
out[base + positionOffset] = positions[s];
|
|
121
|
+
out[base + positionOffset + 1] = positions[s + 1];
|
|
122
|
+
out[base + positionOffset + 2] = positions[s + 2];
|
|
123
|
+
}
|
|
124
|
+
if (normalOffset >= 0) {
|
|
125
|
+
out[base + normalOffset] = normals[s];
|
|
126
|
+
out[base + normalOffset + 1] = normals[s + 1];
|
|
127
|
+
out[base + normalOffset + 2] = normals[s + 2];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
// The float offset (byteOffset / 4) of a semantic within an interleaved vertex record, or -1 when the
|
|
133
|
+
// layout does not carry it.
|
|
134
|
+
function floatOffsetForSemantic(geometry, semantic) {
|
|
135
|
+
const attributes = geometry.layout.attributes;
|
|
136
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
137
|
+
if (attributes[i].semantic === semantic)
|
|
138
|
+
return attributes[i].byteOffset / 4;
|
|
139
|
+
}
|
|
140
|
+
return -1;
|
|
141
|
+
}
|
|
142
|
+
// Vertex attribute locations the mesh vertex shaders fix with layout(location = …); the upload's
|
|
143
|
+
// VAO wires the interleaved buffer to these by semantic. Locations 0–3 are the canonical PBR record
|
|
144
|
+
// (position/normal/tangent/uv0); `color0` (location 4) is bound only when a geometry's layout carries
|
|
145
|
+
// it (the VertexColor path); `uv1` (location 5) is the second UV set (occlusion/lightmap channel per
|
|
146
|
+
// glTF TEXCOORD_1); `joints0`/`weights0` (locations 6–7) are the skinning channels the HAS_SKIN vertex
|
|
147
|
+
// scene2d reads (see GL_SKIN_VERTEX_DECLARATIONS_GLSL). Semantics absent from a layout are left unbound.
|
|
148
|
+
const ATTRIBUTE_LOCATION = {
|
|
149
|
+
color0: 4,
|
|
150
|
+
joints0: 6,
|
|
151
|
+
normal: 1,
|
|
152
|
+
position: 0,
|
|
153
|
+
tangent: 2,
|
|
154
|
+
uv0: 3,
|
|
155
|
+
uv1: 5,
|
|
156
|
+
weights0: 7,
|
|
157
|
+
};
|
|
158
|
+
function bindGlVertexAttribute(gl, attribute, stride) {
|
|
159
|
+
const location = ATTRIBUTE_LOCATION[attribute.semantic];
|
|
160
|
+
if (location === undefined)
|
|
161
|
+
return;
|
|
162
|
+
const [size, type, normalized] = resolveGlVertexFormat(gl, attribute.format);
|
|
163
|
+
gl.enableVertexAttribArray(location);
|
|
164
|
+
// Every built-in mesh shader declares these locations as float/vec inputs. WebGL therefore needs
|
|
165
|
+
// vertexAttribPointer even when storage is integer: it converts uint joints to float values and
|
|
166
|
+
// normalizes unorm weights/colors. vertexAttribIPointer is only valid for ivec/uvec shader inputs
|
|
167
|
+
// and creates a link/input-type mismatch here.
|
|
168
|
+
gl.vertexAttribPointer(location, size, type, normalized, stride, attribute.byteOffset);
|
|
169
|
+
}
|
|
170
|
+
// Maps a VertexFormat to its [componentCount, glType, normalized] tuple. The canonical PBR record
|
|
171
|
+
// is all float32, but the data path may carry packed integer/unorm attributes for later passes.
|
|
172
|
+
function resolveGlVertexFormat(gl, format) {
|
|
173
|
+
switch (format) {
|
|
174
|
+
case 'float32x2':
|
|
175
|
+
return [2, gl.FLOAT, false];
|
|
176
|
+
case 'float32x3':
|
|
177
|
+
return [3, gl.FLOAT, false];
|
|
178
|
+
case 'float32x4':
|
|
179
|
+
return [4, gl.FLOAT, false];
|
|
180
|
+
case 'uint8x4':
|
|
181
|
+
return [4, gl.UNSIGNED_BYTE, false];
|
|
182
|
+
case 'unorm8x4':
|
|
183
|
+
return [4, gl.UNSIGNED_BYTE, true];
|
|
184
|
+
case 'uint16x4':
|
|
185
|
+
return [4, gl.UNSIGNED_SHORT, false];
|
|
186
|
+
default:
|
|
187
|
+
return [3, gl.FLOAT, false];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=glMeshUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glMeshUpload.js","sourceRoot":"","sources":["../src/glMeshUpload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Camera3D, GlRenderState, Scene3DLightsLike, Node3D } from '@flighthq/types';
|
|
2
|
+
export declare function destroyGlParticleEmitter3DShader(state: GlRenderState): void;
|
|
3
|
+
export declare function drawGlScene3DParticleEmitter3Ds(state: GlRenderState, scene: Readonly<Node3D>, camera: Readonly<Camera3D>, lights: Readonly<Scene3DLightsLike>): void;
|
|
4
|
+
//# sourceMappingURL=glParticleEmitter3D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glParticleEmitter3D.d.ts","sourceRoot":"","sources":["../src/glParticleEmitter3D.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAMb,iBAAiB,EACjB,MAAM,EACP,MAAM,iBAAiB,CAAC;AAoWzB,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAS3E;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,IAAI,CAmCN"}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
2
|
+
import { getNodeRuntime, getNodeWorldMatrix4 } from '@flighthq/node';
|
|
3
|
+
import { prepareScene3DRender } from '@flighthq/render';
|
|
4
|
+
import { bindGlTexture, createGlProgram, invalidateGlRenderStateCache } from '@flighthq/render-gl';
|
|
5
|
+
import { ParticleEmitter3DKind } from '@flighthq/types';
|
|
6
|
+
// Per-instance layout (16 floats = 64 bytes):
|
|
7
|
+
// [0] px float world x
|
|
8
|
+
// [1] py float world y
|
|
9
|
+
// [2] pz float world z
|
|
10
|
+
// [3] cosScale float cos(rotation) * scale
|
|
11
|
+
// [4] sinScale float sin(rotation) * scale
|
|
12
|
+
// [5] r float
|
|
13
|
+
// [6] g float
|
|
14
|
+
// [7] b float
|
|
15
|
+
// [8] alpha float
|
|
16
|
+
// [9] u0 float
|
|
17
|
+
// [10] v0 float
|
|
18
|
+
// [11] u1 float
|
|
19
|
+
// [12] v1 float
|
|
20
|
+
// [13] width float
|
|
21
|
+
// [14] height float
|
|
22
|
+
// [15] _pad float (alignment to 64 bytes)
|
|
23
|
+
const INSTANCE_FLOATS = 16;
|
|
24
|
+
const INSTANCE_STRIDE = INSTANCE_FLOATS * 4;
|
|
25
|
+
const PARTICLE_TRANSFORM_STRIDE = 4;
|
|
26
|
+
const PARTICLE_3D_VS = `#version 300 es
|
|
27
|
+
precision highp float;
|
|
28
|
+
|
|
29
|
+
in vec2 a_corner;
|
|
30
|
+
|
|
31
|
+
layout(location = 1) in vec3 a_pos;
|
|
32
|
+
layout(location = 2) in float a_cosScale;
|
|
33
|
+
layout(location = 3) in float a_sinScale;
|
|
34
|
+
layout(location = 4) in vec4 a_color;
|
|
35
|
+
layout(location = 5) in vec4 a_uvRect;
|
|
36
|
+
layout(location = 6) in vec2 a_size;
|
|
37
|
+
|
|
38
|
+
uniform mat4 u_viewProjection;
|
|
39
|
+
uniform vec3 u_cameraRight;
|
|
40
|
+
uniform vec3 u_cameraUp;
|
|
41
|
+
|
|
42
|
+
out vec2 v_uv;
|
|
43
|
+
out vec4 v_color;
|
|
44
|
+
|
|
45
|
+
void main() {
|
|
46
|
+
float lx = (a_corner.x - 0.5) * a_size.x;
|
|
47
|
+
float ly = (a_corner.y - 0.5) * a_size.y;
|
|
48
|
+
float rx = a_cosScale * lx - a_sinScale * ly;
|
|
49
|
+
float ry = a_sinScale * lx + a_cosScale * ly;
|
|
50
|
+
vec3 worldPos = a_pos + u_cameraRight * rx + u_cameraUp * ry;
|
|
51
|
+
gl_Position = u_viewProjection * vec4(worldPos, 1.0);
|
|
52
|
+
v_uv = mix(a_uvRect.xy, a_uvRect.zw, a_corner);
|
|
53
|
+
v_color = a_color;
|
|
54
|
+
}`;
|
|
55
|
+
const PARTICLE_3D_FS = `#version 300 es
|
|
56
|
+
precision highp float;
|
|
57
|
+
|
|
58
|
+
in vec2 v_uv;
|
|
59
|
+
in vec4 v_color;
|
|
60
|
+
|
|
61
|
+
uniform sampler2D u_texture;
|
|
62
|
+
uniform int u_hasTexture;
|
|
63
|
+
|
|
64
|
+
out vec4 fragColor;
|
|
65
|
+
|
|
66
|
+
// Both branches output premultiplied alpha (rgb already scaled by alpha), matching the codebase-wide
|
|
67
|
+
// premultiplied convention the blend funcs in applyGlParticleBlendMode assume. The texture is uploaded
|
|
68
|
+
// premultiplied by bindGlTexture, so tex.rgb is pre-scaled by tex.a; the trailing * v_color.a then
|
|
69
|
+
// premultiplies the tint alpha. The untextured branch premultiplies v_color explicitly.
|
|
70
|
+
void main() {
|
|
71
|
+
if (u_hasTexture != 0) {
|
|
72
|
+
vec4 tex = texture(u_texture, v_uv);
|
|
73
|
+
fragColor = vec4(tex.rgb * v_color.rgb, tex.a) * v_color.a;
|
|
74
|
+
} else {
|
|
75
|
+
fragColor = vec4(v_color.rgb * v_color.a, v_color.a);
|
|
76
|
+
}
|
|
77
|
+
if (fragColor.a <= 0.0) discard;
|
|
78
|
+
}`;
|
|
79
|
+
function compileParticle3DShader(gl) {
|
|
80
|
+
const program = createGlProgram(gl, PARTICLE_3D_VS, PARTICLE_3D_FS, 'ParticleEmitter3D');
|
|
81
|
+
// Bind the emitter's dedicated VAO before creating buffers. This compile runs lazily inside the first
|
|
82
|
+
// particle draw — mid drawGlScene3D, with the last mesh's VAO still bound — so the ELEMENT_ARRAY_BUFFER
|
|
83
|
+
// binding below must land in this VAO, not in that mesh's cached VAO (which would leave it drawing
|
|
84
|
+
// against this 6-index quad buffer and reporting "Insufficient buffer size" on later frames).
|
|
85
|
+
const vao = gl.createVertexArray();
|
|
86
|
+
gl.bindVertexArray(vao);
|
|
87
|
+
const cornerData = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);
|
|
88
|
+
const cornerBuffer = gl.createBuffer();
|
|
89
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, cornerBuffer);
|
|
90
|
+
gl.bufferData(gl.ARRAY_BUFFER, cornerData, gl.STATIC_DRAW);
|
|
91
|
+
const indexData = new Uint16Array([0, 1, 2, 0, 2, 3]);
|
|
92
|
+
const indexBuffer = gl.createBuffer();
|
|
93
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
94
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW);
|
|
95
|
+
const instanceBuffer = gl.createBuffer();
|
|
96
|
+
gl.bindVertexArray(null);
|
|
97
|
+
return {
|
|
98
|
+
cornerBuffer,
|
|
99
|
+
indexBuffer,
|
|
100
|
+
instanceBuffer,
|
|
101
|
+
instanceData: new Float32Array(0),
|
|
102
|
+
locCameraRight: gl.getUniformLocation(program, 'u_cameraRight'),
|
|
103
|
+
locCameraUp: gl.getUniformLocation(program, 'u_cameraUp'),
|
|
104
|
+
locColor: 4,
|
|
105
|
+
locCorner: gl.getAttribLocation(program, 'a_corner'),
|
|
106
|
+
locCosScale: 2,
|
|
107
|
+
locHasTexture: gl.getUniformLocation(program, 'u_hasTexture'),
|
|
108
|
+
locPos: 1,
|
|
109
|
+
locSinScale: 3,
|
|
110
|
+
locSize: 6,
|
|
111
|
+
locTexture: gl.getUniformLocation(program, 'u_texture'),
|
|
112
|
+
locUvRect: 5,
|
|
113
|
+
locViewProjection: gl.getUniformLocation(program, 'u_viewProjection'),
|
|
114
|
+
program,
|
|
115
|
+
vao,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function ensureParticle3DShader(state) {
|
|
119
|
+
let shader = shaderCache.get(state);
|
|
120
|
+
if (shader !== undefined)
|
|
121
|
+
return shader;
|
|
122
|
+
shader = compileParticle3DShader(state.gl);
|
|
123
|
+
shaderCache.set(state, shader);
|
|
124
|
+
return shader;
|
|
125
|
+
}
|
|
126
|
+
function ensureInstanceCapacity(shader, gl, count) {
|
|
127
|
+
const needed = count * INSTANCE_FLOATS;
|
|
128
|
+
if (shader.instanceData.length >= needed)
|
|
129
|
+
return;
|
|
130
|
+
const newSize = Math.max(needed, shader.instanceData.length * 2);
|
|
131
|
+
shader.instanceData = new Float32Array(newSize);
|
|
132
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, shader.instanceBuffer);
|
|
133
|
+
gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
|
|
134
|
+
}
|
|
135
|
+
function collectParticleEmitter3DNodes(node, out) {
|
|
136
|
+
if (!node.enabled)
|
|
137
|
+
return;
|
|
138
|
+
if (node.kind === ParticleEmitter3DKind) {
|
|
139
|
+
out.push(node);
|
|
140
|
+
}
|
|
141
|
+
const children = getNodeRuntime(node).children;
|
|
142
|
+
if (children !== null) {
|
|
143
|
+
for (let i = 0; i < children.length; i++) {
|
|
144
|
+
collectParticleEmitter3DNodes(children[i], out);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Maps a ParticleBlendMode to a GL blend function. The particle fragment shader outputs premultiplied
|
|
149
|
+
// rgb (already scaled by the particle alpha), so 'normal' is the premultiplied over-blend ONE /
|
|
150
|
+
// ONE_MINUS_SRC_ALPHA (NOT SRC_ALPHA, which would double-apply alpha and darken), and 'add' is a
|
|
151
|
+
// straight ONE/ONE sum (a black sprite background adds nothing, fire brightens). Assumes gl.BLEND is
|
|
152
|
+
// already enabled.
|
|
153
|
+
function applyGlParticleBlendMode(gl, mode) {
|
|
154
|
+
switch (mode) {
|
|
155
|
+
case 'add':
|
|
156
|
+
gl.blendFunc(gl.ONE, gl.ONE);
|
|
157
|
+
break;
|
|
158
|
+
case 'multiply':
|
|
159
|
+
gl.blendFunc(gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA);
|
|
160
|
+
break;
|
|
161
|
+
case 'screen':
|
|
162
|
+
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR);
|
|
163
|
+
break;
|
|
164
|
+
default:
|
|
165
|
+
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function drawParticleEmitter3DNode(state, shader, emitter) {
|
|
170
|
+
const gl = state.gl;
|
|
171
|
+
const data = emitter.data;
|
|
172
|
+
const { alphas, atlas, colors, ids, particleCount, positionsZ, transforms } = data;
|
|
173
|
+
if (particleCount === 0)
|
|
174
|
+
return;
|
|
175
|
+
ensureInstanceCapacity(shader, gl, particleCount);
|
|
176
|
+
const hasAtlas = atlas !== null && atlas.image !== null && hasImageResourcePixels(atlas.image);
|
|
177
|
+
const regions = hasAtlas ? atlas.regions : null;
|
|
178
|
+
const numRegions = regions !== null ? regions.length : 0;
|
|
179
|
+
const iw = hasAtlas ? 1 / (atlas.image.width || 1) : 0;
|
|
180
|
+
const ih = hasAtlas ? 1 / (atlas.image.height || 1) : 0;
|
|
181
|
+
const worldMatrix = getNodeWorldMatrix4(emitter);
|
|
182
|
+
const wm = worldMatrix.m;
|
|
183
|
+
// World-space particles are already baked into world coordinates at spawn (see updateParticleEmitter3D),
|
|
184
|
+
// so they must NOT be re-transformed by the emitter's world matrix here.
|
|
185
|
+
const worldSpace = data.worldSpace;
|
|
186
|
+
const instanceData = shader.instanceData;
|
|
187
|
+
let base = 0;
|
|
188
|
+
let drawCount = 0;
|
|
189
|
+
for (let i = 0; i < particleCount; i++) {
|
|
190
|
+
const tt = i * PARTICLE_TRANSFORM_STRIDE;
|
|
191
|
+
const lx = transforms[tt];
|
|
192
|
+
const ly = transforms[tt + 1];
|
|
193
|
+
const rotation = transforms[tt + 2];
|
|
194
|
+
const scale = transforms[tt + 3];
|
|
195
|
+
const lz = positionsZ[i];
|
|
196
|
+
const wx = worldSpace ? lx : wm[0] * lx + wm[4] * ly + wm[8] * lz + wm[12];
|
|
197
|
+
const wy = worldSpace ? ly : wm[1] * lx + wm[5] * ly + wm[9] * lz + wm[13];
|
|
198
|
+
const wz = worldSpace ? lz : wm[2] * lx + wm[6] * ly + wm[10] * lz + wm[14];
|
|
199
|
+
const cosR = Math.cos(rotation) * scale;
|
|
200
|
+
const sinR = Math.sin(rotation) * scale;
|
|
201
|
+
const ct = i * 3;
|
|
202
|
+
const hasColors = colors != null && colors.length > ct + 2;
|
|
203
|
+
const r = hasColors ? colors[ct] : 1;
|
|
204
|
+
const g = hasColors ? colors[ct + 1] : 1;
|
|
205
|
+
const b = hasColors ? colors[ct + 2] : 1;
|
|
206
|
+
let u0 = 0;
|
|
207
|
+
let v0 = 0;
|
|
208
|
+
let u1 = 1;
|
|
209
|
+
let v1 = 1;
|
|
210
|
+
let regionW = 1;
|
|
211
|
+
let regionH = 1;
|
|
212
|
+
if (regions !== null) {
|
|
213
|
+
const id = ids[i];
|
|
214
|
+
if (id >= numRegions)
|
|
215
|
+
continue;
|
|
216
|
+
const region = regions[id];
|
|
217
|
+
if (region.width <= 0 || region.height <= 0)
|
|
218
|
+
continue;
|
|
219
|
+
u0 = region.x * iw;
|
|
220
|
+
v0 = region.y * ih;
|
|
221
|
+
u1 = (region.x + region.width) * iw;
|
|
222
|
+
v1 = (region.y + region.height) * ih;
|
|
223
|
+
regionW = region.width;
|
|
224
|
+
regionH = region.height;
|
|
225
|
+
}
|
|
226
|
+
instanceData[base] = wx;
|
|
227
|
+
instanceData[base + 1] = wy;
|
|
228
|
+
instanceData[base + 2] = wz;
|
|
229
|
+
instanceData[base + 3] = cosR;
|
|
230
|
+
instanceData[base + 4] = sinR;
|
|
231
|
+
instanceData[base + 5] = r;
|
|
232
|
+
instanceData[base + 6] = g;
|
|
233
|
+
instanceData[base + 7] = b;
|
|
234
|
+
instanceData[base + 8] = alphas[i];
|
|
235
|
+
instanceData[base + 9] = u0;
|
|
236
|
+
instanceData[base + 10] = v0;
|
|
237
|
+
instanceData[base + 11] = u1;
|
|
238
|
+
instanceData[base + 12] = v1;
|
|
239
|
+
// The atlas region's pixel dimensions set the billboard's aspect ratio, not its world size: a
|
|
240
|
+
// 3D particle's world extent is its `scale` (folded into cosScale/sinScale above), so the base
|
|
241
|
+
// quad is normalized to a unit square with the larger axis = 1 (max dim is >= 1 since region
|
|
242
|
+
// dims default to 1 and non-positive regions were skipped). Using the raw pixel dims here would
|
|
243
|
+
// make a 64px sprite a 64-world-unit quad — screen-covering, with crippling overdraw.
|
|
244
|
+
const maxDim = regionW >= regionH ? regionW : regionH;
|
|
245
|
+
instanceData[base + 13] = regionW / maxDim;
|
|
246
|
+
instanceData[base + 14] = regionH / maxDim;
|
|
247
|
+
instanceData[base + 15] = 0;
|
|
248
|
+
base += INSTANCE_FLOATS;
|
|
249
|
+
drawCount++;
|
|
250
|
+
}
|
|
251
|
+
if (drawCount === 0)
|
|
252
|
+
return;
|
|
253
|
+
// Bind a dedicated VAO before setting any buffer/attribute state. This instanced draw configures
|
|
254
|
+
// ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER, pointers, and divisors; without its own VAO those writes land
|
|
255
|
+
// in whatever VAO is currently bound — typically the last mesh VAO left bound by drawGlScene3D — whose
|
|
256
|
+
// index buffer then becomes this 6-index quad buffer, so the mesh's next-frame drawElements reports
|
|
257
|
+
// "Insufficient buffer size". The VAO isolates all of it.
|
|
258
|
+
gl.bindVertexArray(shader.vao);
|
|
259
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, shader.instanceBuffer);
|
|
260
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, instanceData, 0, drawCount * INSTANCE_FLOATS);
|
|
261
|
+
gl.uniform1i(shader.locHasTexture, hasAtlas ? 1 : 0);
|
|
262
|
+
if (hasAtlas) {
|
|
263
|
+
// Upload (first use) and bind the atlas image to unit 0. Binding a null texture here instead —
|
|
264
|
+
// as this did — leaves an incomplete sampler that reads (0,0,0,1), turning every textured
|
|
265
|
+
// particle into a solid black quad. bindGlTexture premultiplies alpha on upload, matching the
|
|
266
|
+
// premultiplied output the fragment shader and blend funcs assume.
|
|
267
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
268
|
+
bindGlTexture(state, atlas.image.source);
|
|
269
|
+
gl.uniform1i(shader.locTexture, 0);
|
|
270
|
+
}
|
|
271
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, shader.cornerBuffer);
|
|
272
|
+
gl.enableVertexAttribArray(shader.locCorner);
|
|
273
|
+
gl.vertexAttribPointer(shader.locCorner, 2, gl.FLOAT, false, 8, 0);
|
|
274
|
+
gl.vertexAttribDivisor(shader.locCorner, 0);
|
|
275
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, shader.instanceBuffer);
|
|
276
|
+
gl.enableVertexAttribArray(shader.locPos);
|
|
277
|
+
gl.vertexAttribPointer(shader.locPos, 3, gl.FLOAT, false, INSTANCE_STRIDE, 0);
|
|
278
|
+
gl.vertexAttribDivisor(shader.locPos, 1);
|
|
279
|
+
gl.enableVertexAttribArray(shader.locCosScale);
|
|
280
|
+
gl.vertexAttribPointer(shader.locCosScale, 1, gl.FLOAT, false, INSTANCE_STRIDE, 12);
|
|
281
|
+
gl.vertexAttribDivisor(shader.locCosScale, 1);
|
|
282
|
+
gl.enableVertexAttribArray(shader.locSinScale);
|
|
283
|
+
gl.vertexAttribPointer(shader.locSinScale, 1, gl.FLOAT, false, INSTANCE_STRIDE, 16);
|
|
284
|
+
gl.vertexAttribDivisor(shader.locSinScale, 1);
|
|
285
|
+
gl.enableVertexAttribArray(shader.locColor);
|
|
286
|
+
gl.vertexAttribPointer(shader.locColor, 4, gl.FLOAT, false, INSTANCE_STRIDE, 20);
|
|
287
|
+
gl.vertexAttribDivisor(shader.locColor, 1);
|
|
288
|
+
gl.enableVertexAttribArray(shader.locUvRect);
|
|
289
|
+
gl.vertexAttribPointer(shader.locUvRect, 4, gl.FLOAT, false, INSTANCE_STRIDE, 36);
|
|
290
|
+
gl.vertexAttribDivisor(shader.locUvRect, 1);
|
|
291
|
+
gl.enableVertexAttribArray(shader.locSize);
|
|
292
|
+
gl.vertexAttribPointer(shader.locSize, 2, gl.FLOAT, false, INSTANCE_STRIDE, 52);
|
|
293
|
+
gl.vertexAttribDivisor(shader.locSize, 1);
|
|
294
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, shader.indexBuffer);
|
|
295
|
+
gl.drawElementsInstanced(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0, drawCount);
|
|
296
|
+
// Restore the default VAO. The instance divisors set above are recorded in shader.vao, so isolating
|
|
297
|
+
// them here means a following mesh draw never inherits per-instance stepping on its attributes.
|
|
298
|
+
gl.bindVertexArray(null);
|
|
299
|
+
}
|
|
300
|
+
export function destroyGlParticleEmitter3DShader(state) {
|
|
301
|
+
const shader = shaderCache.get(state);
|
|
302
|
+
if (shader === undefined)
|
|
303
|
+
return;
|
|
304
|
+
const gl = state.gl;
|
|
305
|
+
gl.deleteProgram(shader.program);
|
|
306
|
+
gl.deleteBuffer(shader.cornerBuffer);
|
|
307
|
+
gl.deleteBuffer(shader.indexBuffer);
|
|
308
|
+
gl.deleteBuffer(shader.instanceBuffer);
|
|
309
|
+
shaderCache.delete(state);
|
|
310
|
+
}
|
|
311
|
+
export function drawGlScene3DParticleEmitter3Ds(state, scene, camera, lights) {
|
|
312
|
+
emitterScratch.length = 0;
|
|
313
|
+
collectParticleEmitter3DNodes(scene, emitterScratch);
|
|
314
|
+
if (emitterScratch.length === 0)
|
|
315
|
+
return;
|
|
316
|
+
const list = prepareScene3DRender(state, scene, camera, lights);
|
|
317
|
+
const shader = ensureParticle3DShader(state);
|
|
318
|
+
const gl = state.gl;
|
|
319
|
+
gl.useProgram(shader.program);
|
|
320
|
+
gl.uniformMatrix4fv(shader.locViewProjection, false, list.viewProjection.m);
|
|
321
|
+
// Camera3D right and up from the view matrix rows (column-major storage).
|
|
322
|
+
const vm = camera.view.m;
|
|
323
|
+
gl.uniform3f(shader.locCameraRight, vm[0], vm[4], vm[8]);
|
|
324
|
+
gl.uniform3f(shader.locCameraUp, vm[1], vm[5], vm[9]);
|
|
325
|
+
gl.enable(gl.DEPTH_TEST);
|
|
326
|
+
gl.depthMask(false);
|
|
327
|
+
gl.enable(gl.BLEND);
|
|
328
|
+
for (let i = 0; i < emitterScratch.length; i++) {
|
|
329
|
+
const emitter = emitterScratch[i];
|
|
330
|
+
// Each emitter picks its own blend func: 'add' is the canonical fire/glow mode (the fragment
|
|
331
|
+
// shader premultiplies rgb by alpha, so ONE/ONE brightens and a black sprite background adds
|
|
332
|
+
// nothing). A hardcoded SRC_ALPHA over-blend instead makes an additive sprite darken the scene.
|
|
333
|
+
applyGlParticleBlendMode(gl, emitter.blendMode);
|
|
334
|
+
drawParticleEmitter3DNode(state, shader, emitter);
|
|
335
|
+
}
|
|
336
|
+
gl.depthMask(true);
|
|
337
|
+
gl.disable(gl.BLEND);
|
|
338
|
+
invalidateGlRenderStateCache(state);
|
|
339
|
+
}
|
|
340
|
+
const emitterScratch = [];
|
|
341
|
+
const shaderCache = new WeakMap();
|
|
342
|
+
//# sourceMappingURL=glParticleEmitter3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glParticleEmitter3D.js","sourceRoot":"","sources":["../src/glParticleEmitter3D.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GlPbrDefineKey } from '@flighthq/types';
|
|
2
|
+
export declare function buildGlPbrDefineKey(key: Readonly<GlPbrDefineKey>): string;
|
|
3
|
+
export declare function buildGlPbrDefineSource(key: Readonly<GlPbrDefineKey>): string;
|
|
4
|
+
export declare function getGlPbrFragmentSource(): string;
|
|
5
|
+
export declare function getGlPbrFragmentSourceForKey(key: Readonly<GlPbrDefineKey>): string;
|
|
6
|
+
export declare function getGlPbrVertexSource(): string;
|
|
7
|
+
export declare function getGlPbrVertexSourceForKey(key: Readonly<GlPbrDefineKey>): string;
|
|
8
|
+
//# sourceMappingURL=glPbrPrelude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glPbrPrelude.d.ts","sourceRoot":"","sources":["../src/glPbrPrelude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiCtD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAmBzE;AAKD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAmB5E;AAKD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAID,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAElF;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAKD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAEhF"}
|