@babylonjs/core 7.21.4 → 7.22.0
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/Audio/analyser.js +3 -3
- package/Audio/analyser.js.map +1 -1
- package/Audio/audioSceneComponent.js +7 -7
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +55 -50
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.js +11 -11
- package/Audio/soundTrack.js.map +1 -1
- package/Cameras/flyCamera.js +2 -2
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/freeCamera.js +2 -2
- package/Cameras/freeCamera.js.map +1 -1
- package/Collisions/collisionCoordinator.js +2 -2
- package/Collisions/collisionCoordinator.js.map +1 -1
- package/Debug/debugLayer.js +2 -2
- package/Debug/debugLayer.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +25 -28
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/abstractEngine.d.ts +18 -3
- package/Engines/abstractEngine.js +32 -13
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +0 -7
- package/Engines/engine.js +0 -13
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +3 -9
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +0 -37
- package/Engines/thinEngine.js +2 -40
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -2
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gamepads/gamepadManager.js +2 -2
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Loading/sceneLoader.d.ts +2 -2
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.d.ts +31 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.d.ts +9 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js +454 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.js +147 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.d.ts +7 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js +91 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.configuration.d.ts +17 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js +19 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +130 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js +452 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.d.ts +25 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +284 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.header.d.ts +9 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.header.js +112 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.header.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.d.ts +75 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js +16 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/index.d.ts +7 -0
- package/Materials/Textures/Loaders/EXR/index.js +8 -0
- package/Materials/Textures/Loaders/EXR/index.js.map +1 -0
- package/Materials/Textures/Loaders/basisTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/basisTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/envTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/exrTextureLoader.d.ts +37 -0
- package/Materials/Textures/Loaders/exrTextureLoader.js +122 -0
- package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -0
- package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/hdrTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/index.d.ts +4 -0
- package/Materials/Textures/Loaders/index.js +5 -0
- package/Materials/Textures/Loaders/index.js.map +1 -1
- package/Materials/Textures/{internalTextureLoader.d.ts → Loaders/internalTextureLoader.d.ts} +2 -9
- package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -0
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +1 -8
- package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -13
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/textureLoaderManager.d.ts +9 -0
- package/Materials/Textures/Loaders/textureLoaderManager.js +32 -0
- package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -0
- package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/tgaTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
- package/Materials/Textures/Packer/packer.js +2 -2
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/index.d.ts +0 -1
- package/Materials/Textures/index.js +0 -1
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/fresnelParameters.js +2 -2
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/materialFlags.js +24 -24
- package/Materials/materialFlags.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +2 -2
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/abstractMesh.js +2 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Misc/fileTools.d.ts +13 -0
- package/Misc/fileTools.js +16 -0
- package/Misc/fileTools.js.map +1 -1
- package/Offline/database.js +2 -2
- package/Offline/database.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +2 -2
- package/Rendering/boundingBoxRenderer.js +2 -2
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +7 -2
- package/Rendering/edgesRenderer.js +23 -6
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/index.d.ts +12 -4
- package/Rendering/index.js +14 -4
- package/Rendering/index.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +7 -2
- package/Rendering/outlineRenderer.js +64 -11
- package/Rendering/outlineRenderer.js.map +1 -1
- package/ShadersWGSL/line.fragment.d.ts +9 -0
- package/ShadersWGSL/line.fragment.js +24 -0
- package/ShadersWGSL/line.fragment.js.map +1 -0
- package/ShadersWGSL/line.vertex.d.ts +13 -0
- package/ShadersWGSL/line.vertex.js +36 -0
- package/ShadersWGSL/line.vertex.js.map +1 -0
- package/ShadersWGSL/outline.fragment.d.ts +9 -0
- package/ShadersWGSL/outline.fragment.js +30 -0
- package/ShadersWGSL/outline.fragment.js.map +1 -0
- package/ShadersWGSL/outline.vertex.d.ts +19 -0
- package/ShadersWGSL/outline.vertex.js +66 -0
- package/ShadersWGSL/outline.vertex.js.map +1 -0
- package/Sprites/spriteMap.js +4 -4
- package/Sprites/spriteMap.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +2 -3
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +2 -3
- package/scene.js.map +1 -1
- package/Materials/Textures/internalTextureLoader.js.map +0 -1
- /package/Materials/Textures/{internalTextureLoader.js → Loaders/internalTextureLoader.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outlineRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/outlineRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { _InstancesBatch } from \"../Meshes/mesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Scene } from \"../scene\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport \"../Shaders/outline.fragment\";\r\nimport \"../Shaders/outline.vertex\";\r\nimport { addClipPlaneUniforms, bindClipPlane, prepareStringDefinesForClipPlanes } from \"core/Materials/clipPlaneMaterialHelper\";\r\nimport { BindMorphTargetParameters, PrepareAttributesForMorphTargetsInfluencers, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @internal */\r\n _outlineRenderer: OutlineRenderer;\r\n\r\n /**\r\n * Gets the outline renderer associated with the scene\r\n * @returns a OutlineRenderer\r\n */\r\n getOutlineRenderer(): OutlineRenderer;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the outline renderer associated with the scene\r\n * @returns a OutlineRenderer\r\n */\r\nScene.prototype.getOutlineRenderer = function (): OutlineRenderer {\r\n if (!this._outlineRenderer) {\r\n this._outlineRenderer = new OutlineRenderer(this);\r\n }\r\n return this._outlineRenderer;\r\n};\r\n\r\ndeclare module \"../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /** @internal (Backing field) */\r\n _renderOutline: boolean;\r\n /**\r\n * Gets or sets a boolean indicating if the outline must be rendered as well\r\n * @see https://www.babylonjs-playground.com/#10WJ5S#3\r\n */\r\n renderOutline: boolean;\r\n\r\n /** @internal (Backing field) */\r\n _renderOverlay: boolean;\r\n /**\r\n * Gets or sets a boolean indicating if the overlay must be rendered as well\r\n * @see https://www.babylonjs-playground.com/#10WJ5S#2\r\n */\r\n renderOverlay: boolean;\r\n }\r\n}\r\n\r\nObject.defineProperty(Mesh.prototype, \"renderOutline\", {\r\n get: function (this: Mesh) {\r\n return this._renderOutline;\r\n },\r\n set: function (this: Mesh, value: boolean) {\r\n if (value) {\r\n // Lazy Load the component.\r\n this.getScene().getOutlineRenderer();\r\n }\r\n this._renderOutline = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Mesh.prototype, \"renderOverlay\", {\r\n get: function (this: Mesh) {\r\n return this._renderOverlay;\r\n },\r\n set: function (this: Mesh, value: boolean) {\r\n if (value) {\r\n // Lazy Load the component.\r\n this.getScene().getOutlineRenderer();\r\n }\r\n this._renderOverlay = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * This class is responsible to draw the outline/overlay of meshes.\r\n * It should not be used directly but through the available method on mesh.\r\n */\r\nexport class OutlineRenderer implements ISceneComponent {\r\n /**\r\n * Stencil value used to avoid outline being seen within the mesh when the mesh is transparent\r\n */\r\n private static _StencilReference = 0x04;\r\n /**\r\n * The name of the component. Each component must have a unique name.\r\n */\r\n public name = SceneComponentConstants.NAME_OUTLINERENDERER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Defines a zOffset default Factor to prevent zFighting between the overlay and the mesh.\r\n */\r\n public zOffset = 1;\r\n\r\n /**\r\n * Defines a zOffset default Unit to prevent zFighting between the overlay and the mesh.\r\n */\r\n public zOffsetUnits = 4; // 4 to account for projection a bit by default\r\n\r\n private _engine: AbstractEngine;\r\n private _savedDepthWrite: boolean;\r\n private _passIdForDrawWrapper: number[];\r\n\r\n /**\r\n * Instantiates a new outline renderer. (There could be only one per scene).\r\n * @param scene Defines the scene it belongs to\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n this._engine = scene.getEngine();\r\n this.scene._addComponent(this);\r\n this._passIdForDrawWrapper = [];\r\n for (let i = 0; i < 4; ++i) {\r\n this._passIdForDrawWrapper[i] = this._engine.createRenderPassId(`Outline Renderer (${i})`);\r\n }\r\n }\r\n\r\n /**\r\n * Register the component to one instance of a scene.\r\n */\r\n public register(): void {\r\n this.scene._beforeRenderingMeshStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERINGMESH_OUTLINE, this, this._beforeRenderingMesh);\r\n this.scene._afterRenderingMeshStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGMESH_OUTLINE, this, this._afterRenderingMesh);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n // Nothing to do here.\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n for (let i = 0; i < this._passIdForDrawWrapper.length; ++i) {\r\n this._engine.releaseRenderPassId(this._passIdForDrawWrapper[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Renders the outline in the canvas.\r\n * @param subMesh Defines the sumesh to render\r\n * @param batch Defines the batch of meshes in case of instances\r\n * @param useOverlay Defines if the rendering is for the overlay or the outline\r\n * @param renderPassId Render pass id to use to render the mesh\r\n */\r\n public render(subMesh: SubMesh, batch: _InstancesBatch, useOverlay: boolean = false, renderPassId?: number): void {\r\n renderPassId = renderPassId ?? this._passIdForDrawWrapper[0];\r\n\r\n const scene = this.scene;\r\n const engine = scene.getEngine();\r\n\r\n const hardwareInstancedRendering =\r\n engine.getCaps().instancedArrays &&\r\n ((batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined) || subMesh.getRenderingMesh().hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering, renderPassId)) {\r\n return;\r\n }\r\n\r\n const ownerMesh = subMesh.getMesh();\r\n const replacementMesh = ownerMesh._internalAbstractMeshDataInfo._actAsRegularMesh ? ownerMesh : null;\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = replacementMesh ? replacementMesh : renderingMesh;\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material || !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n const drawWrapper = subMesh._getDrawWrapper(renderPassId)!;\r\n const effect = DrawWrapper.GetEffect(drawWrapper)!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n\r\n // Logarithmic depth\r\n if ((<any>material).useLogarithmicDepth) {\r\n effect.setFloat(\"logarithmicDepthConstant\", 2.0 / (Math.log(scene.activeCamera.maxZ + 1.0) / Math.LN2));\r\n }\r\n\r\n effect.setFloat(\"offset\", useOverlay ? 0 : renderingMesh.outlineWidth);\r\n effect.setColor4(\"color\", useOverlay ? renderingMesh.overlayColor : renderingMesh.outlineColor, useOverlay ? renderingMesh.overlayAlpha : material.alpha);\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n // Alpha test\r\n if (material && material.needAlphaTesting()) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Clip plane\r\n bindClipPlane(effect, material, scene);\r\n\r\n engine.setZOffset(-this.zOffset);\r\n engine.setZOffsetUnits(-this.zOffsetUnits);\r\n\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\r\n effect.setMatrix(\"world\", world);\r\n });\r\n\r\n engine.setZOffset(0);\r\n engine.setZOffsetUnits(0);\r\n }\r\n\r\n /**\r\n * Returns whether or not the outline renderer is ready for a given submesh.\r\n * All the dependencies e.g. submeshes, texture, effect... mus be ready\r\n * @param subMesh Defines the submesh to check readiness for\r\n * @param useInstances Defines whether wee are trying to render instances or not\r\n * @param renderPassId Render pass id to use to render the mesh\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean, renderPassId?: number): boolean {\r\n renderPassId = renderPassId ?? this._passIdForDrawWrapper[0];\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n\r\n const mesh = subMesh.getMesh();\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return false;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n\r\n // Alpha test\r\n if (material.needAlphaTesting()) {\r\n defines.push(\"#define ALPHATEST\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n //Logarithmic depth\r\n if ((<any>material).useLogarithmicDepth) {\r\n defines.push(\"#define LOGARITHMICDEPTH\");\r\n }\r\n // Clip planes\r\n prepareStringDefinesForClipPlanes(material, scene, defines);\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton ? mesh.skeleton.bones.length + 1 : 0));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const morphTargetManager = (mesh as Mesh).morphTargetManager;\r\n let numMorphInfluencers = 0;\r\n if (morphTargetManager) {\r\n numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\r\n if (numMorphInfluencers > 0) {\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n\r\n PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\r\n }\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(renderPassId, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n\r\n if (cachedDefines !== join) {\r\n const uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"offset\",\r\n \"color\",\r\n \"logarithmicDepthConstant\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n ];\r\n addClipPlaneUniforms(uniforms);\r\n\r\n drawWrapper.setEffect(\r\n this.scene.getEngine().createEffect(\"outline\", attribs, uniforms, [\"diffuseSampler\", \"morphTargets\"], join, undefined, undefined, undefined, {\r\n maxSimultaneousMorphTargets: numMorphInfluencers,\r\n }),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n private _beforeRenderingMesh(mesh: Mesh, subMesh: SubMesh, batch: _InstancesBatch): void {\r\n // Outline - step 1\r\n this._savedDepthWrite = this._engine.getDepthWrite();\r\n if (mesh.renderOutline) {\r\n const material = subMesh.getMaterial();\r\n if (material && material.needAlphaBlendingForMesh(mesh)) {\r\n this._engine.cacheStencilState();\r\n // Draw only to stencil buffer for the original mesh\r\n // The resulting stencil buffer will be used so the outline is not visible inside the mesh when the mesh is transparent\r\n this._engine.setDepthWrite(false);\r\n this._engine.setColorWrite(false);\r\n this._engine.setStencilBuffer(true);\r\n this._engine.setStencilOperationPass(Constants.REPLACE);\r\n this._engine.setStencilFunction(Constants.ALWAYS);\r\n this._engine.setStencilMask(OutlineRenderer._StencilReference);\r\n this._engine.setStencilFunctionReference(OutlineRenderer._StencilReference);\r\n this._engine.stencilStateComposer.useStencilGlobalOnly = true;\r\n this.render(subMesh, batch, /* This sets offset to 0 */ true, this._passIdForDrawWrapper[1]);\r\n\r\n this._engine.setColorWrite(true);\r\n this._engine.setStencilFunction(Constants.NOTEQUAL);\r\n }\r\n\r\n // Draw the outline using the above stencil if needed to avoid drawing within the mesh\r\n this._engine.setDepthWrite(false);\r\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[0]);\r\n this._engine.setDepthWrite(this._savedDepthWrite);\r\n\r\n if (material && material.needAlphaBlendingForMesh(mesh)) {\r\n this._engine.stencilStateComposer.useStencilGlobalOnly = false;\r\n this._engine.restoreStencilState();\r\n }\r\n }\r\n }\r\n\r\n private _afterRenderingMesh(mesh: Mesh, subMesh: SubMesh, batch: _InstancesBatch): void {\r\n // Overlay\r\n if (mesh.renderOverlay) {\r\n const currentMode = this._engine.getAlphaMode();\r\n const alphaBlendState = this._engine.alphaState.alphaBlend;\r\n this._engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n this.render(subMesh, batch, true, this._passIdForDrawWrapper[3]);\r\n this._engine.setAlphaMode(currentMode);\r\n this._engine.setDepthWrite(this._savedDepthWrite);\r\n this._engine.alphaState.alphaBlend = alphaBlendState;\r\n }\r\n\r\n // Outline - step 2\r\n if (mesh.renderOutline && this._savedDepthWrite) {\r\n this._engine.setDepthWrite(true);\r\n this._engine.setColorWrite(false);\r\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[2]);\r\n this._engine.setColorWrite(true);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"outlineRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/outlineRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { _InstancesBatch } from \"../Meshes/mesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Scene } from \"../scene\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport { addClipPlaneUniforms, bindClipPlane, prepareStringDefinesForClipPlanes } from \"core/Materials/clipPlaneMaterialHelper\";\r\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareAttributesForMorphTargetsInfluencers, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @internal */\r\n _outlineRenderer: OutlineRenderer;\r\n\r\n /**\r\n * Gets the outline renderer associated with the scene\r\n * @returns a OutlineRenderer\r\n */\r\n getOutlineRenderer(): OutlineRenderer;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the outline renderer associated with the scene\r\n * @returns a OutlineRenderer\r\n */\r\nScene.prototype.getOutlineRenderer = function (): OutlineRenderer {\r\n if (!this._outlineRenderer) {\r\n this._outlineRenderer = new OutlineRenderer(this);\r\n }\r\n return this._outlineRenderer;\r\n};\r\n\r\ndeclare module \"../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /** @internal (Backing field) */\r\n _renderOutline: boolean;\r\n /**\r\n * Gets or sets a boolean indicating if the outline must be rendered as well\r\n * @see https://www.babylonjs-playground.com/#10WJ5S#3\r\n */\r\n renderOutline: boolean;\r\n\r\n /** @internal (Backing field) */\r\n _renderOverlay: boolean;\r\n /**\r\n * Gets or sets a boolean indicating if the overlay must be rendered as well\r\n * @see https://www.babylonjs-playground.com/#10WJ5S#2\r\n */\r\n renderOverlay: boolean;\r\n }\r\n}\r\n\r\nObject.defineProperty(Mesh.prototype, \"renderOutline\", {\r\n get: function (this: Mesh) {\r\n return this._renderOutline;\r\n },\r\n set: function (this: Mesh, value: boolean) {\r\n if (value) {\r\n // Lazy Load the component.\r\n this.getScene().getOutlineRenderer();\r\n }\r\n this._renderOutline = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Mesh.prototype, \"renderOverlay\", {\r\n get: function (this: Mesh) {\r\n return this._renderOverlay;\r\n },\r\n set: function (this: Mesh, value: boolean) {\r\n if (value) {\r\n // Lazy Load the component.\r\n this.getScene().getOutlineRenderer();\r\n }\r\n this._renderOverlay = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * This class is responsible to draw the outline/overlay of meshes.\r\n * It should not be used directly but through the available method on mesh.\r\n */\r\nexport class OutlineRenderer implements ISceneComponent {\r\n /**\r\n * Stencil value used to avoid outline being seen within the mesh when the mesh is transparent\r\n */\r\n private static _StencilReference = 0x04;\r\n /**\r\n * The name of the component. Each component must have a unique name.\r\n */\r\n public name = SceneComponentConstants.NAME_OUTLINERENDERER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Defines a zOffset default Factor to prevent zFighting between the overlay and the mesh.\r\n */\r\n public zOffset = 1;\r\n\r\n /**\r\n * Defines a zOffset default Unit to prevent zFighting between the overlay and the mesh.\r\n */\r\n public zOffsetUnits = 4; // 4 to account for projection a bit by default\r\n\r\n private _engine: AbstractEngine;\r\n private _savedDepthWrite: boolean;\r\n private _passIdForDrawWrapper: number[];\r\n\r\n /** Shader language used by the Outline renderer. */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in the Outline renderer.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * Instantiates a new outline renderer. (There could be only one per scene).\r\n * @param scene Defines the scene it belongs to\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n this._engine = scene.getEngine();\r\n this.scene._addComponent(this);\r\n this._passIdForDrawWrapper = [];\r\n for (let i = 0; i < 4; ++i) {\r\n this._passIdForDrawWrapper[i] = this._engine.createRenderPassId(`Outline Renderer (${i})`);\r\n }\r\n\r\n const engine = this._engine;\r\n if (engine.isWebGPU) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n }\r\n }\r\n\r\n /**\r\n * Register the component to one instance of a scene.\r\n */\r\n public register(): void {\r\n this.scene._beforeRenderingMeshStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERINGMESH_OUTLINE, this, this._beforeRenderingMesh);\r\n this.scene._afterRenderingMeshStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGMESH_OUTLINE, this, this._afterRenderingMesh);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n // Nothing to do here.\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n for (let i = 0; i < this._passIdForDrawWrapper.length; ++i) {\r\n this._engine.releaseRenderPassId(this._passIdForDrawWrapper[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Renders the outline in the canvas.\r\n * @param subMesh Defines the sumesh to render\r\n * @param batch Defines the batch of meshes in case of instances\r\n * @param useOverlay Defines if the rendering is for the overlay or the outline\r\n * @param renderPassId Render pass id to use to render the mesh\r\n */\r\n public render(subMesh: SubMesh, batch: _InstancesBatch, useOverlay: boolean = false, renderPassId?: number): void {\r\n renderPassId = renderPassId ?? this._passIdForDrawWrapper[0];\r\n\r\n const scene = this.scene;\r\n const engine = scene.getEngine();\r\n\r\n const hardwareInstancedRendering =\r\n engine.getCaps().instancedArrays &&\r\n ((batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined) || subMesh.getRenderingMesh().hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering, renderPassId)) {\r\n return;\r\n }\r\n\r\n const ownerMesh = subMesh.getMesh();\r\n const replacementMesh = ownerMesh._internalAbstractMeshDataInfo._actAsRegularMesh ? ownerMesh : null;\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = replacementMesh ? replacementMesh : renderingMesh;\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material || !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n const drawWrapper = subMesh._getDrawWrapper(renderPassId)!;\r\n const effect = DrawWrapper.GetEffect(drawWrapper)!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n\r\n // Logarithmic depth\r\n if ((<any>material).useLogarithmicDepth) {\r\n effect.setFloat(\"logarithmicDepthConstant\", 2.0 / (Math.log(scene.activeCamera.maxZ + 1.0) / Math.LN2));\r\n }\r\n\r\n effect.setFloat(\"offset\", useOverlay ? 0 : renderingMesh.outlineWidth);\r\n effect.setColor4(\"color\", useOverlay ? renderingMesh.overlayColor : renderingMesh.outlineColor, useOverlay ? renderingMesh.overlayAlpha : material.alpha);\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n\r\n // Bones\r\n BindBonesParameters(effectiveMesh, effect);\r\n\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\r\n if (hardwareInstancedRendering && bvaManager && bvaManager.isEnabled) {\r\n bvaManager.bind(effect, true);\r\n }\r\n\r\n // Alpha test\r\n if (material && material.needAlphaTesting()) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Clip plane\r\n bindClipPlane(effect, material, scene);\r\n\r\n engine.setZOffset(-this.zOffset);\r\n engine.setZOffsetUnits(-this.zOffsetUnits);\r\n\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\r\n effect.setMatrix(\"world\", world);\r\n });\r\n\r\n engine.setZOffset(0);\r\n engine.setZOffsetUnits(0);\r\n }\r\n\r\n /**\r\n * Returns whether or not the outline renderer is ready for a given submesh.\r\n * All the dependencies e.g. submeshes, texture, effect... mus be ready\r\n * @param subMesh Defines the submesh to check readiness for\r\n * @param useInstances Defines whether wee are trying to render instances or not\r\n * @param renderPassId Render pass id to use to render the mesh\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean, renderPassId?: number): boolean {\r\n renderPassId = renderPassId ?? this._passIdForDrawWrapper[0];\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n\r\n const mesh = subMesh.getMesh();\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return false;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n\r\n // Alpha test\r\n if (material.needAlphaTesting()) {\r\n defines.push(\"#define ALPHATEST\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n //Logarithmic depth\r\n if ((<any>material).useLogarithmicDepth) {\r\n defines.push(\"#define LOGARITHMICDEPTH\");\r\n }\r\n // Clip planes\r\n prepareStringDefinesForClipPlanes(material, scene, defines);\r\n\r\n // Bones\r\n const fallbacks = new EffectFallbacks();\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n const skeleton = mesh.skeleton;\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n if (mesh.numBoneInfluencers > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n if (skeleton.isUsingTextureForMatrices) {\r\n defines.push(\"#define BONETEXTURE\");\r\n } else {\r\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\r\n }\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const morphTargetManager = (mesh as Mesh).morphTargetManager;\r\n let numMorphInfluencers = 0;\r\n if (morphTargetManager) {\r\n numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\r\n if (numMorphInfluencers > 0) {\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n\r\n PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\r\n }\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = mesh.bakedVertexAnimationManager;\r\n if (useInstances && bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(renderPassId, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n\r\n if (cachedDefines !== join) {\r\n const uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"offset\",\r\n \"color\",\r\n \"logarithmicDepthConstant\",\r\n \"morphTargetInfluences\",\r\n \"boneTextureWidth\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"bakedVertexAnimationSettings\",\r\n \"bakedVertexAnimationTextureSizeInverted\",\r\n \"bakedVertexAnimationTime\",\r\n \"bakedVertexAnimationTexture\",\r\n ];\r\n const samplers = [\"diffuseSampler\", \"boneSampler\", \"morphTargets\", \"bakedVertexAnimationTexture\"];\r\n\r\n addClipPlaneUniforms(uniforms);\r\n\r\n drawWrapper.setEffect(\r\n this.scene.getEngine().createEffect(\r\n \"outline\",\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [],\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../ShadersWGSL/outline.fragment\"), import(\"../ShadersWGSL/outline.vertex\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/outline.fragment\"), import(\"../Shaders/outline.vertex\")]);\r\n }\r\n },\r\n },\r\n this.scene.getEngine()\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n private _beforeRenderingMesh(mesh: Mesh, subMesh: SubMesh, batch: _InstancesBatch): void {\r\n // Outline - step 1\r\n this._savedDepthWrite = this._engine.getDepthWrite();\r\n if (mesh.renderOutline) {\r\n const material = subMesh.getMaterial();\r\n if (material && material.needAlphaBlendingForMesh(mesh)) {\r\n this._engine.cacheStencilState();\r\n // Draw only to stencil buffer for the original mesh\r\n // The resulting stencil buffer will be used so the outline is not visible inside the mesh when the mesh is transparent\r\n this._engine.setDepthWrite(false);\r\n this._engine.setColorWrite(false);\r\n this._engine.setStencilBuffer(true);\r\n this._engine.setStencilOperationPass(Constants.REPLACE);\r\n this._engine.setStencilFunction(Constants.ALWAYS);\r\n this._engine.setStencilMask(OutlineRenderer._StencilReference);\r\n this._engine.setStencilFunctionReference(OutlineRenderer._StencilReference);\r\n this._engine.stencilStateComposer.useStencilGlobalOnly = true;\r\n this.render(subMesh, batch, /* This sets offset to 0 */ true, this._passIdForDrawWrapper[1]);\r\n\r\n this._engine.setColorWrite(true);\r\n this._engine.setStencilFunction(Constants.NOTEQUAL);\r\n }\r\n\r\n // Draw the outline using the above stencil if needed to avoid drawing within the mesh\r\n this._engine.setDepthWrite(false);\r\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[0]);\r\n this._engine.setDepthWrite(this._savedDepthWrite);\r\n\r\n if (material && material.needAlphaBlendingForMesh(mesh)) {\r\n this._engine.stencilStateComposer.useStencilGlobalOnly = false;\r\n this._engine.restoreStencilState();\r\n }\r\n }\r\n }\r\n\r\n private _afterRenderingMesh(mesh: Mesh, subMesh: SubMesh, batch: _InstancesBatch): void {\r\n // Overlay\r\n if (mesh.renderOverlay) {\r\n const currentMode = this._engine.getAlphaMode();\r\n const alphaBlendState = this._engine.alphaState.alphaBlend;\r\n this._engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n this.render(subMesh, batch, true, this._passIdForDrawWrapper[3]);\r\n this._engine.setAlphaMode(currentMode);\r\n this._engine.setDepthWrite(this._savedDepthWrite);\r\n this._engine.alphaState.alphaBlend = alphaBlendState;\r\n }\r\n\r\n // Outline - step 2\r\n if (mesh.renderOutline && this._savedDepthWrite) {\r\n this._engine.setDepthWrite(true);\r\n this._engine.setColorWrite(false);\r\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[2]);\r\n this._engine.setColorWrite(true);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "./ShadersInclude/clipPlaneFragmentDeclaration";
|
|
2
|
+
import "./ShadersInclude/logDepthDeclaration";
|
|
3
|
+
import "./ShadersInclude/logDepthFragment";
|
|
4
|
+
import "./ShadersInclude/clipPlaneFragment";
|
|
5
|
+
/** @internal */
|
|
6
|
+
export declare const linePixelShaderWGSL: {
|
|
7
|
+
name: string;
|
|
8
|
+
shader: string;
|
|
9
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
|
|
4
|
+
import "./ShadersInclude/logDepthDeclaration.js";
|
|
5
|
+
import "./ShadersInclude/logDepthFragment.js";
|
|
6
|
+
import "./ShadersInclude/clipPlaneFragment.js";
|
|
7
|
+
const name = "linePixelShader";
|
|
8
|
+
const shader = `#include<clipPlaneFragmentDeclaration>
|
|
9
|
+
uniform color: vec4f;
|
|
10
|
+
#include<logDepthDeclaration>
|
|
11
|
+
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
12
|
+
@fragment
|
|
13
|
+
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
14
|
+
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
15
|
+
#include<logDepthFragment>
|
|
16
|
+
#include<clipPlaneFragment>
|
|
17
|
+
fragmentOutputs.color=uniforms.color;
|
|
18
|
+
#define CUSTOM_FRAGMENT_MAIN_END
|
|
19
|
+
}`;
|
|
20
|
+
// Sideeffect
|
|
21
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
22
|
+
/** @internal */
|
|
23
|
+
export const linePixelShaderWGSL = { name, shader };
|
|
24
|
+
//# sourceMappingURL=line.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/line.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,oCAAoC,CAAC;AAE5C,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;EAWb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/logDepthFragment\";\nimport \"./ShadersInclude/clipPlaneFragment\";\n\nconst name = \"linePixelShader\";\nconst shader = `#include<clipPlaneFragmentDeclaration>\nuniform color: vec4f;\n#include<logDepthDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<logDepthFragment>\n#include<clipPlaneFragment>\nfragmentOutputs.color=uniforms.color;\n#define CUSTOM_FRAGMENT_MAIN_END\n}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const linePixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./ShadersInclude/instancesDeclaration";
|
|
2
|
+
import "./ShadersInclude/clipPlaneVertexDeclaration";
|
|
3
|
+
import "./ShadersInclude/sceneUboDeclaration";
|
|
4
|
+
import "./ShadersInclude/meshUboDeclaration";
|
|
5
|
+
import "./ShadersInclude/logDepthDeclaration";
|
|
6
|
+
import "./ShadersInclude/instancesVertex";
|
|
7
|
+
import "./ShadersInclude/clipPlaneVertex";
|
|
8
|
+
import "./ShadersInclude/logDepthVertex";
|
|
9
|
+
/** @internal */
|
|
10
|
+
export declare const lineVertexShaderWGSL: {
|
|
11
|
+
name: string;
|
|
12
|
+
shader: string;
|
|
13
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
import "./ShadersInclude/instancesDeclaration.js";
|
|
4
|
+
import "./ShadersInclude/clipPlaneVertexDeclaration.js";
|
|
5
|
+
import "./ShadersInclude/sceneUboDeclaration.js";
|
|
6
|
+
import "./ShadersInclude/meshUboDeclaration.js";
|
|
7
|
+
import "./ShadersInclude/logDepthDeclaration.js";
|
|
8
|
+
import "./ShadersInclude/instancesVertex.js";
|
|
9
|
+
import "./ShadersInclude/clipPlaneVertex.js";
|
|
10
|
+
import "./ShadersInclude/logDepthVertex.js";
|
|
11
|
+
const name = "lineVertexShader";
|
|
12
|
+
const shader = `#define ADDITIONAL_VERTEX_DECLARATION
|
|
13
|
+
#include<instancesDeclaration>
|
|
14
|
+
#include<clipPlaneVertexDeclaration>
|
|
15
|
+
#include<sceneUboDeclaration>
|
|
16
|
+
#include<meshUboDeclaration>
|
|
17
|
+
attribute position: vec3f;attribute normal: vec4f;uniform width: f32;uniform aspectRatio: f32;
|
|
18
|
+
#include<logDepthDeclaration>
|
|
19
|
+
#define CUSTOM_VERTEX_DEFINITIONS
|
|
20
|
+
@vertex
|
|
21
|
+
fn main(input : VertexInputs)->FragmentInputs {
|
|
22
|
+
#define CUSTOM_VERTEX_MAIN_BEGIN
|
|
23
|
+
#include<instancesVertex>
|
|
24
|
+
var worldViewProjection: mat4x4f=scene.viewProjection*finalWorld;var viewPosition: vec4f=worldViewProjection* vec4f(input.position,1.0);var viewPositionNext: vec4f=worldViewProjection* vec4f(input.normal.xyz,1.0);var currentScreen: vec2f=viewPosition.xy/viewPosition.w;var nextScreen: vec2f=viewPositionNext.xy/viewPositionNext.w;currentScreen=vec2f(currentScreen.x*uniforms.aspectRatio,currentScreen.y);nextScreen=vec2f(nextScreen.x*uniforms.aspectRatio,nextScreen.y);var dir: vec2f=normalize(nextScreen-currentScreen);var normalDir: vec2f= vec2f(-dir.y,dir.x);normalDir*=uniforms.width/2.0;normalDir=vec2f(normalDir.x/uniforms.aspectRatio,normalDir.y);var offset: vec4f= vec4f(normalDir*input.normal.w,0.0,0.0);vertexOutputs.position=viewPosition+offset;
|
|
25
|
+
#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
26
|
+
var worldPos: vec4f=finalWorld*vec4f(input.position,1.0);
|
|
27
|
+
#include<clipPlaneVertex>
|
|
28
|
+
#endif
|
|
29
|
+
#include<logDepthVertex>
|
|
30
|
+
#define CUSTOM_VERTEX_MAIN_END
|
|
31
|
+
}`;
|
|
32
|
+
// Sideeffect
|
|
33
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
34
|
+
/** @internal */
|
|
35
|
+
export const lineVertexShaderWGSL = { name, shader };
|
|
36
|
+
//# sourceMappingURL=line.vertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/line.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,6CAA6C,CAAC;AACrD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;EAmBb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/sceneUboDeclaration\";\nimport \"./ShadersInclude/meshUboDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"lineVertexShader\";\nconst shader = `#define ADDITIONAL_VERTEX_DECLARATION\n#include<instancesDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<sceneUboDeclaration>\n#include<meshUboDeclaration>\nattribute position: vec3f;attribute normal: vec4f;uniform width: f32;uniform aspectRatio: f32;\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {\n#define CUSTOM_VERTEX_MAIN_BEGIN\n#include<instancesVertex>\nvar worldViewProjection: mat4x4f=scene.viewProjection*finalWorld;var viewPosition: vec4f=worldViewProjection* vec4f(input.position,1.0);var viewPositionNext: vec4f=worldViewProjection* vec4f(input.normal.xyz,1.0);var currentScreen: vec2f=viewPosition.xy/viewPosition.w;var nextScreen: vec2f=viewPositionNext.xy/viewPositionNext.w;currentScreen=vec2f(currentScreen.x*uniforms.aspectRatio,currentScreen.y);nextScreen=vec2f(nextScreen.x*uniforms.aspectRatio,nextScreen.y);var dir: vec2f=normalize(nextScreen-currentScreen);var normalDir: vec2f= vec2f(-dir.y,dir.x);normalDir*=uniforms.width/2.0;normalDir=vec2f(normalDir.x/uniforms.aspectRatio,normalDir.y);var offset: vec4f= vec4f(normalDir*input.normal.w,0.0,0.0);vertexOutputs.position=viewPosition+offset;\n#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)\nvar worldPos: vec4f=finalWorld*vec4f(input.position,1.0);\n#include<clipPlaneVertex>\n#endif\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const lineVertexShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "./ShadersInclude/clipPlaneFragmentDeclaration";
|
|
2
|
+
import "./ShadersInclude/logDepthDeclaration";
|
|
3
|
+
import "./ShadersInclude/clipPlaneFragment";
|
|
4
|
+
import "./ShadersInclude/logDepthFragment";
|
|
5
|
+
/** @internal */
|
|
6
|
+
export declare const outlinePixelShaderWGSL: {
|
|
7
|
+
name: string;
|
|
8
|
+
shader: string;
|
|
9
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
|
|
4
|
+
import "./ShadersInclude/logDepthDeclaration.js";
|
|
5
|
+
import "./ShadersInclude/clipPlaneFragment.js";
|
|
6
|
+
import "./ShadersInclude/logDepthFragment.js";
|
|
7
|
+
const name = "outlinePixelShader";
|
|
8
|
+
const shader = `uniform color: vec4f;
|
|
9
|
+
#ifdef ALPHATEST
|
|
10
|
+
varying vUV: vec2;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>;
|
|
11
|
+
#endif
|
|
12
|
+
#include<clipPlaneFragmentDeclaration>
|
|
13
|
+
#include<logDepthDeclaration>
|
|
14
|
+
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
15
|
+
@fragment
|
|
16
|
+
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
17
|
+
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
18
|
+
#include<clipPlaneFragment>
|
|
19
|
+
#ifdef ALPHATEST
|
|
20
|
+
if (textureSample(diffuseSampler,diffuseSamplerSampler,fragmentInputs.vUV).a<0.4) {discard;}
|
|
21
|
+
#endif
|
|
22
|
+
#include<logDepthFragment>
|
|
23
|
+
fragmentOutputs.color=uniforms.color;
|
|
24
|
+
#define CUSTOM_FRAGMENT_MAIN_END
|
|
25
|
+
}`;
|
|
26
|
+
// Sideeffect
|
|
27
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
28
|
+
/** @internal */
|
|
29
|
+
export const outlinePixelShaderWGSL = { name, shader };
|
|
30
|
+
//# sourceMappingURL=outline.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/outline.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mCAAmC,CAAC;AAE3C,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;EAiBb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/clipPlaneFragment\";\nimport \"./ShadersInclude/logDepthFragment\";\n\nconst name = \"outlinePixelShader\";\nconst shader = `uniform color: vec4f;\n#ifdef ALPHATEST\nvarying vUV: vec2;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>;\n#endif\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\n#ifdef ALPHATEST\nif (textureSample(diffuseSampler,diffuseSamplerSampler,fragmentInputs.vUV).a<0.4) {discard;}\n#endif\n#include<logDepthFragment>\nfragmentOutputs.color=uniforms.color;\n#define CUSTOM_FRAGMENT_MAIN_END\n}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const outlinePixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import "./ShadersInclude/bonesDeclaration";
|
|
2
|
+
import "./ShadersInclude/bakedVertexAnimationDeclaration";
|
|
3
|
+
import "./ShadersInclude/morphTargetsVertexGlobalDeclaration";
|
|
4
|
+
import "./ShadersInclude/morphTargetsVertexDeclaration";
|
|
5
|
+
import "./ShadersInclude/clipPlaneVertexDeclaration";
|
|
6
|
+
import "./ShadersInclude/instancesDeclaration";
|
|
7
|
+
import "./ShadersInclude/logDepthDeclaration";
|
|
8
|
+
import "./ShadersInclude/morphTargetsVertexGlobal";
|
|
9
|
+
import "./ShadersInclude/morphTargetsVertex";
|
|
10
|
+
import "./ShadersInclude/instancesVertex";
|
|
11
|
+
import "./ShadersInclude/bonesVertex";
|
|
12
|
+
import "./ShadersInclude/bakedVertexAnimation";
|
|
13
|
+
import "./ShadersInclude/clipPlaneVertex";
|
|
14
|
+
import "./ShadersInclude/logDepthVertex";
|
|
15
|
+
/** @internal */
|
|
16
|
+
export declare const outlineVertexShaderWGSL: {
|
|
17
|
+
name: string;
|
|
18
|
+
shader: string;
|
|
19
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
import "./ShadersInclude/bonesDeclaration.js";
|
|
4
|
+
import "./ShadersInclude/bakedVertexAnimationDeclaration.js";
|
|
5
|
+
import "./ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
|
|
6
|
+
import "./ShadersInclude/morphTargetsVertexDeclaration.js";
|
|
7
|
+
import "./ShadersInclude/clipPlaneVertexDeclaration.js";
|
|
8
|
+
import "./ShadersInclude/instancesDeclaration.js";
|
|
9
|
+
import "./ShadersInclude/logDepthDeclaration.js";
|
|
10
|
+
import "./ShadersInclude/morphTargetsVertexGlobal.js";
|
|
11
|
+
import "./ShadersInclude/morphTargetsVertex.js";
|
|
12
|
+
import "./ShadersInclude/instancesVertex.js";
|
|
13
|
+
import "./ShadersInclude/bonesVertex.js";
|
|
14
|
+
import "./ShadersInclude/bakedVertexAnimation.js";
|
|
15
|
+
import "./ShadersInclude/clipPlaneVertex.js";
|
|
16
|
+
import "./ShadersInclude/logDepthVertex.js";
|
|
17
|
+
const name = "outlineVertexShader";
|
|
18
|
+
const shader = `attribute position: vec3f;attribute normal: vec3f;
|
|
19
|
+
#include<bonesDeclaration>
|
|
20
|
+
#include<bakedVertexAnimationDeclaration>
|
|
21
|
+
#include<morphTargetsVertexGlobalDeclaration>
|
|
22
|
+
#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]
|
|
23
|
+
#include<clipPlaneVertexDeclaration>
|
|
24
|
+
uniform offset: f32;
|
|
25
|
+
#include<instancesDeclaration>
|
|
26
|
+
uniform viewProjection: mat4x4f;
|
|
27
|
+
#ifdef ALPHATEST
|
|
28
|
+
varying vUV: vec2f;uniform diffuseMatrix: mat4x4f;
|
|
29
|
+
#ifdef UV1
|
|
30
|
+
attribute uv: vec2f;
|
|
31
|
+
#endif
|
|
32
|
+
#ifdef UV2
|
|
33
|
+
attribute uv2: vec2f;
|
|
34
|
+
#endif
|
|
35
|
+
#endif
|
|
36
|
+
#include<logDepthDeclaration>
|
|
37
|
+
#define CUSTOM_VERTEX_DEFINITIONS
|
|
38
|
+
@vertex
|
|
39
|
+
fn main(input: VertexInputs)->FragmentInputs {var positionUpdated: vec3f=vertexInputs.position;var normalUpdated: vec3f=vertexInputs.normal;
|
|
40
|
+
#ifdef UV1
|
|
41
|
+
var uvUpdated: vec2f=vertexInputs.uv;
|
|
42
|
+
#endif
|
|
43
|
+
#include<morphTargetsVertexGlobal>
|
|
44
|
+
#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]
|
|
45
|
+
var offsetPosition: vec3f=positionUpdated+(normalUpdated*uniforms.offset);
|
|
46
|
+
#include<instancesVertex>
|
|
47
|
+
#include<bonesVertex>
|
|
48
|
+
#include<bakedVertexAnimation>
|
|
49
|
+
var worldPos: vec4f=finalWorld*vec4f(offsetPosition,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;
|
|
50
|
+
#ifdef ALPHATEST
|
|
51
|
+
#ifdef UV1
|
|
52
|
+
vertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uvUpdated,1.0,0.0)).xy;
|
|
53
|
+
#endif
|
|
54
|
+
#ifdef UV2
|
|
55
|
+
vertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(vertexInputs.uv2,1.0,0.0)).xy;
|
|
56
|
+
#endif
|
|
57
|
+
#endif
|
|
58
|
+
#include<clipPlaneVertex>
|
|
59
|
+
#include<logDepthVertex>
|
|
60
|
+
}
|
|
61
|
+
`;
|
|
62
|
+
// Sideeffect
|
|
63
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
64
|
+
/** @internal */
|
|
65
|
+
export const outlineVertexShaderWGSL = { name, shader };
|
|
66
|
+
//# sourceMappingURL=outline.vertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/outline.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Cd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"outlineVertexShader\";\nconst shader = `attribute position: vec3f;attribute normal: vec3f;\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<clipPlaneVertexDeclaration>\nuniform offset: f32;\n#include<instancesDeclaration>\nuniform viewProjection: mat4x4f;\n#ifdef ALPHATEST\nvarying vUV: vec2f;uniform diffuseMatrix: mat4x4f; \n#ifdef UV1\nattribute uv: vec2f;\n#endif\n#ifdef UV2\nattribute uv2: vec2f;\n#endif\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\n@vertex\nfn main(input: VertexInputs)->FragmentInputs {var positionUpdated: vec3f=vertexInputs.position;var normalUpdated: vec3f=vertexInputs.normal;\n#ifdef UV1\nvar uvUpdated: vec2f=vertexInputs.uv;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\nvar offsetPosition: vec3f=positionUpdated+(normalUpdated*uniforms.offset);\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvar worldPos: vec4f=finalWorld*vec4f(offsetPosition,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;\n#ifdef ALPHATEST\n#ifdef UV1\nvertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uvUpdated,1.0,0.0)).xy;\n#endif\n#ifdef UV2\nvertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(vertexInputs.uv2,1.0,0.0)).xy;\n#endif\n#endif\n#include<clipPlaneVertex>\n#include<logDepthVertex>\n}\n`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const outlineVertexShaderWGSL = { name, shader };\n"]}
|
package/Sprites/spriteMap.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Engine } from "../Engines/engine.js";
|
|
2
1
|
import { Vector2, Vector3 } from "../Maths/math.vector.js";
|
|
3
2
|
import { Texture } from "../Materials/Textures/texture.js";
|
|
4
3
|
import { RawTexture } from "../Materials/Textures/rawTexture.js";
|
|
@@ -7,6 +6,7 @@ import { Effect } from "../Materials/effect.js";
|
|
|
7
6
|
import { CreatePlane } from "../Meshes/Builders/planeBuilder.js";
|
|
8
7
|
import "../Shaders/spriteMap.fragment.js";
|
|
9
8
|
import "../Shaders/spriteMap.vertex.js";
|
|
9
|
+
|
|
10
10
|
/**
|
|
11
11
|
* Class used to manage a grid restricted sprite deployment on an Output plane.
|
|
12
12
|
*/
|
|
@@ -226,7 +226,7 @@ export class SpriteMap {
|
|
|
226
226
|
data[i * 4 + 3 + this.spriteCount * 8] = t;
|
|
227
227
|
}
|
|
228
228
|
const floatArray = new Float32Array(data);
|
|
229
|
-
const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, 4, this._scene, false, false, Texture.NEAREST_NEAREST,
|
|
229
|
+
const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, 4, this._scene, false, false, Texture.NEAREST_NEAREST, 1);
|
|
230
230
|
return t;
|
|
231
231
|
}
|
|
232
232
|
/**
|
|
@@ -254,7 +254,7 @@ export class SpriteMap {
|
|
|
254
254
|
data = buffer;
|
|
255
255
|
}
|
|
256
256
|
const floatArray = new Float32Array(data);
|
|
257
|
-
const t = RawTexture.CreateRGBATexture(floatArray, _tx, _ty, this._scene, false, false, Texture.NEAREST_NEAREST,
|
|
257
|
+
const t = RawTexture.CreateRGBATexture(floatArray, _tx, _ty, this._scene, false, false, Texture.NEAREST_NEAREST, 1);
|
|
258
258
|
return t;
|
|
259
259
|
}
|
|
260
260
|
/**
|
|
@@ -310,7 +310,7 @@ export class SpriteMap {
|
|
|
310
310
|
else {
|
|
311
311
|
floatArray = buffer;
|
|
312
312
|
}
|
|
313
|
-
const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, this.options.maxAnimationFrames || 4, this._scene, false, false, Texture.NEAREST_NEAREST,
|
|
313
|
+
const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, this.options.maxAnimationFrames || 4, this._scene, false, false, Texture.NEAREST_NEAREST, 1);
|
|
314
314
|
return t;
|
|
315
315
|
}
|
|
316
316
|
/**
|
package/Sprites/spriteMap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spriteMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteMap.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../Engines/engine\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector2, Vector3 } from \"../Maths/math.vector\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { ISpriteJSONSprite, ISpriteJSONAtlas } from \"./ISprites\";\r\nimport { Effect } from \"../Materials/effect\";\r\n\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport \"../Shaders/spriteMap.fragment\";\r\nimport \"../Shaders/spriteMap.vertex\";\r\n\r\n/**\r\n * Defines the basic options interface of a SpriteMap\r\n */\r\nexport interface ISpriteMapOptions {\r\n /**\r\n * Vector2 of the number of cells in the grid.\r\n */\r\n stageSize?: Vector2;\r\n\r\n /**\r\n * Vector2 of the size of the output plane in World Units.\r\n */\r\n outputSize?: Vector2;\r\n\r\n /**\r\n * Vector3 of the position of the output plane in World Units.\r\n */\r\n outputPosition?: Vector3;\r\n\r\n /**\r\n * Vector3 of the rotation of the output plane.\r\n */\r\n outputRotation?: Vector3;\r\n\r\n /**\r\n * number of layers that the system will reserve in resources.\r\n */\r\n layerCount?: number;\r\n\r\n /**\r\n * number of max animation frames a single cell will reserve in resources.\r\n */\r\n maxAnimationFrames?: number;\r\n\r\n /**\r\n * number cell index of the base tile when the system compiles.\r\n */\r\n baseTile?: number;\r\n\r\n /**\r\n * boolean flip the sprite after its been repositioned by the framing data.\r\n */\r\n flipU?: boolean;\r\n\r\n /**\r\n * Vector3 scalar of the global RGB values of the SpriteMap.\r\n */\r\n colorMultiply?: Vector3;\r\n}\r\n\r\n/**\r\n * Defines the IDisposable interface in order to be cleanable from resources.\r\n */\r\nexport interface ISpriteMap extends IDisposable {\r\n /**\r\n * String name of the SpriteMap.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The JSON Array file from a https://www.codeandweb.com/texturepacker export. Or similar structure.\r\n */\r\n atlasJSON: ISpriteJSONAtlas;\r\n\r\n /**\r\n * Texture of the SpriteMap.\r\n */\r\n spriteSheet: Texture;\r\n\r\n /**\r\n * The parameters to initialize the SpriteMap with.\r\n */\r\n options: ISpriteMapOptions;\r\n}\r\n\r\n/**\r\n * Class used to manage a grid restricted sprite deployment on an Output plane.\r\n */\r\nexport class SpriteMap implements ISpriteMap {\r\n /** The Name of the spriteMap */\r\n public name: string;\r\n\r\n /** The JSON file with the frame and meta data */\r\n public atlasJSON: ISpriteJSONAtlas;\r\n\r\n /** The systems Sprite Sheet Texture */\r\n public spriteSheet: Texture;\r\n\r\n /** Arguments passed with the Constructor */\r\n public options: ISpriteMapOptions;\r\n\r\n /** Public Sprite Storage array, parsed from atlasJSON */\r\n public sprites: Array<ISpriteJSONSprite>;\r\n\r\n /** Returns the Number of Sprites in the System */\r\n public get spriteCount(): number {\r\n return this.sprites.length;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public get position(): Vector3 {\r\n return this._output.position;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public set position(v: Vector3) {\r\n this._output.position = v;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public get rotation(): Vector3 {\r\n return this._output.rotation;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public set rotation(v: Vector3) {\r\n this._output.rotation = v;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public get animationMap() {\r\n return this._animationMap;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public set animationMap(v: RawTexture) {\r\n const buffer = v!._texture!._bufferView;\r\n const am = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = am;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /** Scene that the SpriteMap was created in */\r\n private _scene: Scene;\r\n\r\n /** Texture Buffer of Float32 that holds tile frame data*/\r\n private _frameMap: RawTexture;\r\n\r\n /** Texture Buffers of Float32 that holds tileMap data*/\r\n private _tileMaps: RawTexture[];\r\n\r\n /** Texture Buffer of Float32 that holds Animation Data*/\r\n private _animationMap: RawTexture;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _material: ShaderMaterial;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _output: Mesh;\r\n\r\n /** Systems Time Ticker*/\r\n private _time: number;\r\n\r\n /**\r\n * Creates a new SpriteMap\r\n * @param name defines the SpriteMaps Name\r\n * @param atlasJSON is the JSON file that controls the Sprites Frames and Meta\r\n * @param spriteSheet is the Texture that the Sprites are on.\r\n * @param options a basic deployment configuration\r\n * @param scene The Scene that the map is deployed on\r\n */\r\n constructor(name: string, atlasJSON: ISpriteJSONAtlas, spriteSheet: Texture, options: ISpriteMapOptions, scene: Scene) {\r\n this.name = name;\r\n this.sprites = [];\r\n this.atlasJSON = atlasJSON;\r\n this.sprites = this.atlasJSON[\"frames\"];\r\n this.spriteSheet = spriteSheet;\r\n\r\n /**\r\n * Run through the options and set what ever defaults are needed that where not declared.\r\n */\r\n this.options = options;\r\n options.stageSize = options.stageSize || new Vector2(1, 1);\r\n options.outputSize = options.outputSize || options.stageSize;\r\n options.outputPosition = options.outputPosition || Vector3.Zero();\r\n options.outputRotation = options.outputRotation || Vector3.Zero();\r\n options.layerCount = options.layerCount || 1;\r\n options.maxAnimationFrames = options.maxAnimationFrames || 0;\r\n options.baseTile = options.baseTile || 0;\r\n options.flipU = options.flipU || false;\r\n options.colorMultiply = options.colorMultiply || new Vector3(1, 1, 1);\r\n\r\n this._scene = scene;\r\n\r\n this._frameMap = this._createFrameBuffer();\r\n\r\n this._tileMaps = new Array();\r\n for (let i = 0; i < options.layerCount; i++) {\r\n this._tileMaps.push(this._createTileBuffer(null, i));\r\n }\r\n\r\n this._animationMap = this._createTileAnimationBuffer(null);\r\n\r\n const defines = [];\r\n defines.push(\"#define LAYERS \" + options.layerCount);\r\n\r\n if (options.flipU) {\r\n defines.push(\"#define FLIPU\");\r\n }\r\n\r\n defines.push(`#define MAX_ANIMATION_FRAMES ${options.maxAnimationFrames}.0`);\r\n\r\n const shaderString: string = Effect.ShadersStore[\"spriteMapPixelShader\"];\r\n\r\n let layerSampleString: string;\r\n if (!scene.getEngine()._features.supportSwitchCaseInShader) {\r\n layerSampleString = \"\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += `if (${i} == i) { frameID = texture2D(tileMaps[${i}], (tileID + 0.5) / stageSize, 0.).x; }`;\r\n }\r\n } else {\r\n layerSampleString = \"switch(i) {\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += \"case \" + i + \" : frameID = texture(tileMaps[\" + i + \"], (tileID + 0.5) / stageSize, 0.).x;\";\r\n layerSampleString += \"break;\";\r\n }\r\n layerSampleString += \"}\";\r\n }\r\n\r\n Effect.ShadersStore[\"spriteMap\" + this.name + \"PixelShader\"] = shaderString.replace(\"#define LAYER_ID_SWITCH\", layerSampleString);\r\n\r\n this._material = new ShaderMaterial(\r\n \"spriteMap:\" + this.name,\r\n this._scene,\r\n {\r\n vertex: \"spriteMap\",\r\n fragment: \"spriteMap\" + this.name,\r\n },\r\n {\r\n defines,\r\n attributes: [\"position\", \"normal\", \"uv\"],\r\n uniforms: [\"worldViewProjection\", \"time\", \"stageSize\", \"outputSize\", \"spriteMapSize\", \"spriteCount\", \"time\", \"colorMul\", \"mousePosition\", \"curTile\", \"flipU\"],\r\n samplers: [\"spriteSheet\", \"frameMap\", \"tileMaps\", \"animationMap\"],\r\n needAlphaBlending: true,\r\n }\r\n );\r\n\r\n this._time = 0;\r\n\r\n this._material.setFloat(\"spriteCount\", this.spriteCount);\r\n this._material.setVector2(\"stageSize\", options.stageSize);\r\n this._material.setVector2(\"outputSize\", options.outputSize);\r\n this._material.setTexture(\"spriteSheet\", this.spriteSheet);\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(1, 1));\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n\r\n let tickSave = 0;\r\n\r\n const bindSpriteTexture = () => {\r\n if (this.spriteSheet && this.spriteSheet.isReady()) {\r\n if (this.spriteSheet._texture) {\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(this.spriteSheet._texture.baseWidth || 1, this.spriteSheet._texture.baseHeight || 1));\r\n return;\r\n }\r\n }\r\n if (tickSave < 100) {\r\n setTimeout(() => {\r\n tickSave++;\r\n bindSpriteTexture();\r\n }, 100);\r\n }\r\n };\r\n\r\n bindSpriteTexture();\r\n\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n this._material.setTexture(\"frameMap\", this._frameMap);\r\n this._material.setTextureArray(\"tileMaps\", this._tileMaps);\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n this._material.setFloat(\"time\", this._time);\r\n\r\n this._output = CreatePlane(name + \":output\", { size: 1, updatable: true }, scene);\r\n this._output.scaling.x = options.outputSize.x;\r\n this._output.scaling.y = options.outputSize.y;\r\n this.position = options.outputPosition;\r\n this.rotation = options.outputRotation;\r\n\r\n const obfunction = () => {\r\n this._time += this._scene.getEngine().getDeltaTime();\r\n this._material.setFloat(\"time\", this._time);\r\n };\r\n\r\n this._scene.onBeforeRenderObservable.add(obfunction);\r\n this._output.material = this._material;\r\n }\r\n\r\n /**\r\n * Returns tileID location\r\n * @returns Vector2 the cell position ID\r\n */\r\n public getTileID(): Vector2 {\r\n const p = this.getMousePosition();\r\n p.multiplyInPlace(this.options.stageSize || Vector2.Zero());\r\n p.x = Math.floor(p.x);\r\n p.y = Math.floor(p.y);\r\n return p;\r\n }\r\n\r\n /**\r\n * Gets the UV location of the mouse over the SpriteMap.\r\n * @returns Vector2 the UV position of the mouse interaction\r\n */\r\n public getMousePosition(): Vector2 {\r\n const out = this._output;\r\n const pickinfo: Nullable<PickingInfo> = this._scene.pick(this._scene.pointerX, this._scene.pointerY, (mesh) => {\r\n if (mesh !== out) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n if (!pickinfo || !pickinfo.hit || !pickinfo.getTextureCoordinates) {\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n const coords = pickinfo.getTextureCoordinates();\r\n if (coords) {\r\n return coords;\r\n }\r\n\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n /**\r\n * Creates the \"frame\" texture Buffer\r\n * -------------------------------------\r\n * Structure of frames\r\n * \"filename\": \"Falling-Water-2.png\",\r\n * \"frame\": {\"x\":69,\"y\":103,\"w\":24,\"h\":32},\r\n * \"rotated\": true,\r\n * \"trimmed\": true,\r\n * \"spriteSourceSize\": {\"x\":4,\"y\":0,\"w\":24,\"h\":32},\r\n * \"sourceSize\": {\"w\":32,\"h\":32}\r\n * @returns RawTexture of the frameMap\r\n */\r\n private _createFrameBuffer(): RawTexture {\r\n const data = [];\r\n //Do two Passes\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0); //frame\r\n data.push(0, 0, 0, 0); //spriteSourceSize\r\n data.push(0, 0, 0, 0); //sourceSize, rotated, trimmed\r\n data.push(0, 0, 0, 0); //Keep it pow2 cause I\"m cool like that... it helps with sampling accuracy as well. Plus then we have 4 other parameters for future stuff.\r\n }\r\n //Second Pass\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n const f = this.sprites[i][\"frame\"];\r\n const sss = this.sprites[i][\"spriteSourceSize\"];\r\n const ss = this.sprites[i][\"sourceSize\"];\r\n const r = this.sprites[i][\"rotated\"] ? 1 : 0;\r\n const t = this.sprites[i][\"trimmed\"] ? 1 : 0;\r\n\r\n //frame\r\n data[i * 4] = f.x;\r\n data[i * 4 + 1] = f.y;\r\n data[i * 4 + 2] = f.w;\r\n data[i * 4 + 3] = f.h;\r\n //spriteSourceSize\r\n data[i * 4 + this.spriteCount * 4] = sss.x;\r\n data[i * 4 + 1 + this.spriteCount * 4] = sss.y;\r\n data[i * 4 + 3 + this.spriteCount * 4] = sss.h;\r\n //sourceSize, rotated, trimmed\r\n data[i * 4 + this.spriteCount * 8] = ss.w;\r\n data[i * 4 + 1 + this.spriteCount * 8] = ss.h;\r\n data[i * 4 + 2 + this.spriteCount * 8] = r;\r\n data[i * 4 + 3 + this.spriteCount * 8] = t;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n\r\n const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, 4, this._scene, false, false, Texture.NEAREST_NEAREST, Engine.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Creates the tileMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @param _layer indicates what layer for a logic trigger dealing with the baseTile. The system uses this\r\n * @returns RawTexture of the tileMap\r\n */\r\n private _createTileBuffer(buffer: any, _layer: number = 0): RawTexture {\r\n let data = [];\r\n const _ty = this.options.stageSize!.y || 0;\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n if (!buffer) {\r\n let bt = this.options.baseTile;\r\n if (_layer != 0) {\r\n bt = 0;\r\n }\r\n\r\n for (let y = 0; y < _ty; y++) {\r\n for (let x = 0; x < _tx * 4; x += 4) {\r\n data.push(bt, 0, 0, 0);\r\n }\r\n }\r\n } else {\r\n data = buffer;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n const t = RawTexture.CreateRGBATexture(floatArray, _tx, _ty, this._scene, false, false, Texture.NEAREST_NEAREST, Engine.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the tileMaps\r\n * @param _layer is the ID of the layer you want to edit on the SpriteMap\r\n * @param pos is the iVector2 Coordinates of the Tile\r\n * @param tile The SpriteIndex of the new Tile\r\n */\r\n public changeTiles(_layer: number = 0, pos: Vector2 | Vector2[], tile: number = 0): void {\r\n const buffer = this._tileMaps[_layer]!._texture!._bufferView;\r\n if (buffer === null) {\r\n return;\r\n }\r\n\r\n let p = [];\r\n if (pos instanceof Vector2) {\r\n p.push(pos);\r\n } else {\r\n p = pos;\r\n }\r\n\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n for (let i = 0; i < p.length; i++) {\r\n const _p = p[i];\r\n _p.x = Math.floor(_p.x);\r\n _p.y = Math.floor(_p.y);\r\n const id: number = _p.x * 4 + _p.y * (_tx * 4);\r\n (buffer as any)[id] = tile;\r\n }\r\n\r\n const t = this._createTileBuffer(buffer);\r\n this._tileMaps[_layer].dispose();\r\n this._tileMaps[_layer] = t;\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n }\r\n\r\n /**\r\n * Creates the animationMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @returns RawTexture of the animationMap\r\n */\r\n private _createTileAnimationBuffer(buffer: Nullable<ArrayBufferView>): RawTexture {\r\n const data = [];\r\n let floatArray;\r\n if (!buffer) {\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0);\r\n let count = 1;\r\n while (count < (this.options.maxAnimationFrames || 4)) {\r\n data.push(0, 0, 0, 0);\r\n count++;\r\n }\r\n }\r\n floatArray = new Float32Array(data);\r\n } else {\r\n floatArray = buffer;\r\n }\r\n\r\n const t = RawTexture.CreateRGBATexture(\r\n floatArray,\r\n this.spriteCount,\r\n this.options.maxAnimationFrames || 4,\r\n this._scene,\r\n false,\r\n false,\r\n Texture.NEAREST_NEAREST,\r\n Engine.TEXTURETYPE_FLOAT\r\n );\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the animationMap\r\n * @param cellID is the Index of the Sprite\r\n * @param _frame is the target Animation frame\r\n * @param toCell is the Target Index of the next frame of the animation\r\n * @param time is a value between 0-1 that is the trigger for when the frame should change tiles\r\n * @param speed is a global scalar of the time variable on the map.\r\n */\r\n public addAnimationToTile(cellID: number = 0, _frame: number = 0, toCell: number = 0, time: number = 0, speed: number = 1): void {\r\n const buffer: any = this._animationMap!._texture!._bufferView;\r\n const id: number = cellID * 4 + this.spriteCount * 4 * _frame;\r\n if (!buffer) {\r\n return;\r\n }\r\n buffer[id] = toCell;\r\n buffer[id + 1] = time;\r\n buffer[id + 2] = speed;\r\n const t = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = t;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /**\r\n * Exports the .tilemaps file\r\n */\r\n public saveTileMaps(): void {\r\n let maps = \"\";\r\n for (let i = 0; i < this._tileMaps.length; i++) {\r\n if (i > 0) {\r\n maps += \"\\n\\r\";\r\n }\r\n\r\n maps += this._tileMaps[i]!._texture!._bufferView!.toString();\r\n }\r\n const hiddenElement = document.createElement(\"a\");\r\n hiddenElement.href = \"data:octet/stream;charset=utf-8,\" + encodeURI(maps);\r\n hiddenElement.target = \"_blank\";\r\n hiddenElement.download = this.name + \".tilemaps\";\r\n hiddenElement.click();\r\n hiddenElement.remove();\r\n }\r\n\r\n /**\r\n * Imports the .tilemaps file\r\n * @param url of the .tilemaps file\r\n */\r\n public loadTileMaps(url: string): void {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"GET\", url);\r\n\r\n const _lc = this.options!.layerCount || 0;\r\n\r\n xhr.onload = () => {\r\n const data = xhr.response.split(\"\\n\\r\");\r\n for (let i = 0; i < _lc; i++) {\r\n const d = data[i].split(\",\").map(Number);\r\n const t = this._createTileBuffer(d);\r\n this._tileMaps[i].dispose();\r\n this._tileMaps[i] = t;\r\n }\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n };\r\n xhr.send();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n this._output.dispose();\r\n this._material.dispose();\r\n this._animationMap.dispose();\r\n this._tileMaps.forEach((tm) => {\r\n tm.dispose();\r\n });\r\n this._frameMap.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"spriteMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IDisposable, Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector2, Vector3 } from \"../Maths/math.vector\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { ISpriteJSONSprite, ISpriteJSONAtlas } from \"./ISprites\";\r\nimport { Effect } from \"../Materials/effect\";\r\n\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport \"../Shaders/spriteMap.fragment\";\r\nimport \"../Shaders/spriteMap.vertex\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\n/**\r\n * Defines the basic options interface of a SpriteMap\r\n */\r\nexport interface ISpriteMapOptions {\r\n /**\r\n * Vector2 of the number of cells in the grid.\r\n */\r\n stageSize?: Vector2;\r\n\r\n /**\r\n * Vector2 of the size of the output plane in World Units.\r\n */\r\n outputSize?: Vector2;\r\n\r\n /**\r\n * Vector3 of the position of the output plane in World Units.\r\n */\r\n outputPosition?: Vector3;\r\n\r\n /**\r\n * Vector3 of the rotation of the output plane.\r\n */\r\n outputRotation?: Vector3;\r\n\r\n /**\r\n * number of layers that the system will reserve in resources.\r\n */\r\n layerCount?: number;\r\n\r\n /**\r\n * number of max animation frames a single cell will reserve in resources.\r\n */\r\n maxAnimationFrames?: number;\r\n\r\n /**\r\n * number cell index of the base tile when the system compiles.\r\n */\r\n baseTile?: number;\r\n\r\n /**\r\n * boolean flip the sprite after its been repositioned by the framing data.\r\n */\r\n flipU?: boolean;\r\n\r\n /**\r\n * Vector3 scalar of the global RGB values of the SpriteMap.\r\n */\r\n colorMultiply?: Vector3;\r\n}\r\n\r\n/**\r\n * Defines the IDisposable interface in order to be cleanable from resources.\r\n */\r\nexport interface ISpriteMap extends IDisposable {\r\n /**\r\n * String name of the SpriteMap.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The JSON Array file from a https://www.codeandweb.com/texturepacker export. Or similar structure.\r\n */\r\n atlasJSON: ISpriteJSONAtlas;\r\n\r\n /**\r\n * Texture of the SpriteMap.\r\n */\r\n spriteSheet: Texture;\r\n\r\n /**\r\n * The parameters to initialize the SpriteMap with.\r\n */\r\n options: ISpriteMapOptions;\r\n}\r\n\r\n/**\r\n * Class used to manage a grid restricted sprite deployment on an Output plane.\r\n */\r\nexport class SpriteMap implements ISpriteMap {\r\n /** The Name of the spriteMap */\r\n public name: string;\r\n\r\n /** The JSON file with the frame and meta data */\r\n public atlasJSON: ISpriteJSONAtlas;\r\n\r\n /** The systems Sprite Sheet Texture */\r\n public spriteSheet: Texture;\r\n\r\n /** Arguments passed with the Constructor */\r\n public options: ISpriteMapOptions;\r\n\r\n /** Public Sprite Storage array, parsed from atlasJSON */\r\n public sprites: Array<ISpriteJSONSprite>;\r\n\r\n /** Returns the Number of Sprites in the System */\r\n public get spriteCount(): number {\r\n return this.sprites.length;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public get position(): Vector3 {\r\n return this._output.position;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public set position(v: Vector3) {\r\n this._output.position = v;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public get rotation(): Vector3 {\r\n return this._output.rotation;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public set rotation(v: Vector3) {\r\n this._output.rotation = v;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public get animationMap() {\r\n return this._animationMap;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public set animationMap(v: RawTexture) {\r\n const buffer = v!._texture!._bufferView;\r\n const am = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = am;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /** Scene that the SpriteMap was created in */\r\n private _scene: Scene;\r\n\r\n /** Texture Buffer of Float32 that holds tile frame data*/\r\n private _frameMap: RawTexture;\r\n\r\n /** Texture Buffers of Float32 that holds tileMap data*/\r\n private _tileMaps: RawTexture[];\r\n\r\n /** Texture Buffer of Float32 that holds Animation Data*/\r\n private _animationMap: RawTexture;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _material: ShaderMaterial;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _output: Mesh;\r\n\r\n /** Systems Time Ticker*/\r\n private _time: number;\r\n\r\n /**\r\n * Creates a new SpriteMap\r\n * @param name defines the SpriteMaps Name\r\n * @param atlasJSON is the JSON file that controls the Sprites Frames and Meta\r\n * @param spriteSheet is the Texture that the Sprites are on.\r\n * @param options a basic deployment configuration\r\n * @param scene The Scene that the map is deployed on\r\n */\r\n constructor(name: string, atlasJSON: ISpriteJSONAtlas, spriteSheet: Texture, options: ISpriteMapOptions, scene: Scene) {\r\n this.name = name;\r\n this.sprites = [];\r\n this.atlasJSON = atlasJSON;\r\n this.sprites = this.atlasJSON[\"frames\"];\r\n this.spriteSheet = spriteSheet;\r\n\r\n /**\r\n * Run through the options and set what ever defaults are needed that where not declared.\r\n */\r\n this.options = options;\r\n options.stageSize = options.stageSize || new Vector2(1, 1);\r\n options.outputSize = options.outputSize || options.stageSize;\r\n options.outputPosition = options.outputPosition || Vector3.Zero();\r\n options.outputRotation = options.outputRotation || Vector3.Zero();\r\n options.layerCount = options.layerCount || 1;\r\n options.maxAnimationFrames = options.maxAnimationFrames || 0;\r\n options.baseTile = options.baseTile || 0;\r\n options.flipU = options.flipU || false;\r\n options.colorMultiply = options.colorMultiply || new Vector3(1, 1, 1);\r\n\r\n this._scene = scene;\r\n\r\n this._frameMap = this._createFrameBuffer();\r\n\r\n this._tileMaps = new Array();\r\n for (let i = 0; i < options.layerCount; i++) {\r\n this._tileMaps.push(this._createTileBuffer(null, i));\r\n }\r\n\r\n this._animationMap = this._createTileAnimationBuffer(null);\r\n\r\n const defines = [];\r\n defines.push(\"#define LAYERS \" + options.layerCount);\r\n\r\n if (options.flipU) {\r\n defines.push(\"#define FLIPU\");\r\n }\r\n\r\n defines.push(`#define MAX_ANIMATION_FRAMES ${options.maxAnimationFrames}.0`);\r\n\r\n const shaderString: string = Effect.ShadersStore[\"spriteMapPixelShader\"];\r\n\r\n let layerSampleString: string;\r\n if (!scene.getEngine()._features.supportSwitchCaseInShader) {\r\n layerSampleString = \"\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += `if (${i} == i) { frameID = texture2D(tileMaps[${i}], (tileID + 0.5) / stageSize, 0.).x; }`;\r\n }\r\n } else {\r\n layerSampleString = \"switch(i) {\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += \"case \" + i + \" : frameID = texture(tileMaps[\" + i + \"], (tileID + 0.5) / stageSize, 0.).x;\";\r\n layerSampleString += \"break;\";\r\n }\r\n layerSampleString += \"}\";\r\n }\r\n\r\n Effect.ShadersStore[\"spriteMap\" + this.name + \"PixelShader\"] = shaderString.replace(\"#define LAYER_ID_SWITCH\", layerSampleString);\r\n\r\n this._material = new ShaderMaterial(\r\n \"spriteMap:\" + this.name,\r\n this._scene,\r\n {\r\n vertex: \"spriteMap\",\r\n fragment: \"spriteMap\" + this.name,\r\n },\r\n {\r\n defines,\r\n attributes: [\"position\", \"normal\", \"uv\"],\r\n uniforms: [\"worldViewProjection\", \"time\", \"stageSize\", \"outputSize\", \"spriteMapSize\", \"spriteCount\", \"time\", \"colorMul\", \"mousePosition\", \"curTile\", \"flipU\"],\r\n samplers: [\"spriteSheet\", \"frameMap\", \"tileMaps\", \"animationMap\"],\r\n needAlphaBlending: true,\r\n }\r\n );\r\n\r\n this._time = 0;\r\n\r\n this._material.setFloat(\"spriteCount\", this.spriteCount);\r\n this._material.setVector2(\"stageSize\", options.stageSize);\r\n this._material.setVector2(\"outputSize\", options.outputSize);\r\n this._material.setTexture(\"spriteSheet\", this.spriteSheet);\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(1, 1));\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n\r\n let tickSave = 0;\r\n\r\n const bindSpriteTexture = () => {\r\n if (this.spriteSheet && this.spriteSheet.isReady()) {\r\n if (this.spriteSheet._texture) {\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(this.spriteSheet._texture.baseWidth || 1, this.spriteSheet._texture.baseHeight || 1));\r\n return;\r\n }\r\n }\r\n if (tickSave < 100) {\r\n setTimeout(() => {\r\n tickSave++;\r\n bindSpriteTexture();\r\n }, 100);\r\n }\r\n };\r\n\r\n bindSpriteTexture();\r\n\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n this._material.setTexture(\"frameMap\", this._frameMap);\r\n this._material.setTextureArray(\"tileMaps\", this._tileMaps);\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n this._material.setFloat(\"time\", this._time);\r\n\r\n this._output = CreatePlane(name + \":output\", { size: 1, updatable: true }, scene);\r\n this._output.scaling.x = options.outputSize.x;\r\n this._output.scaling.y = options.outputSize.y;\r\n this.position = options.outputPosition;\r\n this.rotation = options.outputRotation;\r\n\r\n const obfunction = () => {\r\n this._time += this._scene.getEngine().getDeltaTime();\r\n this._material.setFloat(\"time\", this._time);\r\n };\r\n\r\n this._scene.onBeforeRenderObservable.add(obfunction);\r\n this._output.material = this._material;\r\n }\r\n\r\n /**\r\n * Returns tileID location\r\n * @returns Vector2 the cell position ID\r\n */\r\n public getTileID(): Vector2 {\r\n const p = this.getMousePosition();\r\n p.multiplyInPlace(this.options.stageSize || Vector2.Zero());\r\n p.x = Math.floor(p.x);\r\n p.y = Math.floor(p.y);\r\n return p;\r\n }\r\n\r\n /**\r\n * Gets the UV location of the mouse over the SpriteMap.\r\n * @returns Vector2 the UV position of the mouse interaction\r\n */\r\n public getMousePosition(): Vector2 {\r\n const out = this._output;\r\n const pickinfo: Nullable<PickingInfo> = this._scene.pick(this._scene.pointerX, this._scene.pointerY, (mesh) => {\r\n if (mesh !== out) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n if (!pickinfo || !pickinfo.hit || !pickinfo.getTextureCoordinates) {\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n const coords = pickinfo.getTextureCoordinates();\r\n if (coords) {\r\n return coords;\r\n }\r\n\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n /**\r\n * Creates the \"frame\" texture Buffer\r\n * -------------------------------------\r\n * Structure of frames\r\n * \"filename\": \"Falling-Water-2.png\",\r\n * \"frame\": {\"x\":69,\"y\":103,\"w\":24,\"h\":32},\r\n * \"rotated\": true,\r\n * \"trimmed\": true,\r\n * \"spriteSourceSize\": {\"x\":4,\"y\":0,\"w\":24,\"h\":32},\r\n * \"sourceSize\": {\"w\":32,\"h\":32}\r\n * @returns RawTexture of the frameMap\r\n */\r\n private _createFrameBuffer(): RawTexture {\r\n const data = [];\r\n //Do two Passes\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0); //frame\r\n data.push(0, 0, 0, 0); //spriteSourceSize\r\n data.push(0, 0, 0, 0); //sourceSize, rotated, trimmed\r\n data.push(0, 0, 0, 0); //Keep it pow2 cause I\"m cool like that... it helps with sampling accuracy as well. Plus then we have 4 other parameters for future stuff.\r\n }\r\n //Second Pass\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n const f = this.sprites[i][\"frame\"];\r\n const sss = this.sprites[i][\"spriteSourceSize\"];\r\n const ss = this.sprites[i][\"sourceSize\"];\r\n const r = this.sprites[i][\"rotated\"] ? 1 : 0;\r\n const t = this.sprites[i][\"trimmed\"] ? 1 : 0;\r\n\r\n //frame\r\n data[i * 4] = f.x;\r\n data[i * 4 + 1] = f.y;\r\n data[i * 4 + 2] = f.w;\r\n data[i * 4 + 3] = f.h;\r\n //spriteSourceSize\r\n data[i * 4 + this.spriteCount * 4] = sss.x;\r\n data[i * 4 + 1 + this.spriteCount * 4] = sss.y;\r\n data[i * 4 + 3 + this.spriteCount * 4] = sss.h;\r\n //sourceSize, rotated, trimmed\r\n data[i * 4 + this.spriteCount * 8] = ss.w;\r\n data[i * 4 + 1 + this.spriteCount * 8] = ss.h;\r\n data[i * 4 + 2 + this.spriteCount * 8] = r;\r\n data[i * 4 + 3 + this.spriteCount * 8] = t;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n\r\n const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, 4, this._scene, false, false, Texture.NEAREST_NEAREST, Constants.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Creates the tileMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @param _layer indicates what layer for a logic trigger dealing with the baseTile. The system uses this\r\n * @returns RawTexture of the tileMap\r\n */\r\n private _createTileBuffer(buffer: any, _layer: number = 0): RawTexture {\r\n let data = [];\r\n const _ty = this.options.stageSize!.y || 0;\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n if (!buffer) {\r\n let bt = this.options.baseTile;\r\n if (_layer != 0) {\r\n bt = 0;\r\n }\r\n\r\n for (let y = 0; y < _ty; y++) {\r\n for (let x = 0; x < _tx * 4; x += 4) {\r\n data.push(bt, 0, 0, 0);\r\n }\r\n }\r\n } else {\r\n data = buffer;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n const t = RawTexture.CreateRGBATexture(floatArray, _tx, _ty, this._scene, false, false, Texture.NEAREST_NEAREST, Constants.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the tileMaps\r\n * @param _layer is the ID of the layer you want to edit on the SpriteMap\r\n * @param pos is the iVector2 Coordinates of the Tile\r\n * @param tile The SpriteIndex of the new Tile\r\n */\r\n public changeTiles(_layer: number = 0, pos: Vector2 | Vector2[], tile: number = 0): void {\r\n const buffer = this._tileMaps[_layer]!._texture!._bufferView;\r\n if (buffer === null) {\r\n return;\r\n }\r\n\r\n let p = [];\r\n if (pos instanceof Vector2) {\r\n p.push(pos);\r\n } else {\r\n p = pos;\r\n }\r\n\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n for (let i = 0; i < p.length; i++) {\r\n const _p = p[i];\r\n _p.x = Math.floor(_p.x);\r\n _p.y = Math.floor(_p.y);\r\n const id: number = _p.x * 4 + _p.y * (_tx * 4);\r\n (buffer as any)[id] = tile;\r\n }\r\n\r\n const t = this._createTileBuffer(buffer);\r\n this._tileMaps[_layer].dispose();\r\n this._tileMaps[_layer] = t;\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n }\r\n\r\n /**\r\n * Creates the animationMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @returns RawTexture of the animationMap\r\n */\r\n private _createTileAnimationBuffer(buffer: Nullable<ArrayBufferView>): RawTexture {\r\n const data = [];\r\n let floatArray;\r\n if (!buffer) {\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0);\r\n let count = 1;\r\n while (count < (this.options.maxAnimationFrames || 4)) {\r\n data.push(0, 0, 0, 0);\r\n count++;\r\n }\r\n }\r\n floatArray = new Float32Array(data);\r\n } else {\r\n floatArray = buffer;\r\n }\r\n\r\n const t = RawTexture.CreateRGBATexture(\r\n floatArray,\r\n this.spriteCount,\r\n this.options.maxAnimationFrames || 4,\r\n this._scene,\r\n false,\r\n false,\r\n Texture.NEAREST_NEAREST,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the animationMap\r\n * @param cellID is the Index of the Sprite\r\n * @param _frame is the target Animation frame\r\n * @param toCell is the Target Index of the next frame of the animation\r\n * @param time is a value between 0-1 that is the trigger for when the frame should change tiles\r\n * @param speed is a global scalar of the time variable on the map.\r\n */\r\n public addAnimationToTile(cellID: number = 0, _frame: number = 0, toCell: number = 0, time: number = 0, speed: number = 1): void {\r\n const buffer: any = this._animationMap!._texture!._bufferView;\r\n const id: number = cellID * 4 + this.spriteCount * 4 * _frame;\r\n if (!buffer) {\r\n return;\r\n }\r\n buffer[id] = toCell;\r\n buffer[id + 1] = time;\r\n buffer[id + 2] = speed;\r\n const t = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = t;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /**\r\n * Exports the .tilemaps file\r\n */\r\n public saveTileMaps(): void {\r\n let maps = \"\";\r\n for (let i = 0; i < this._tileMaps.length; i++) {\r\n if (i > 0) {\r\n maps += \"\\n\\r\";\r\n }\r\n\r\n maps += this._tileMaps[i]!._texture!._bufferView!.toString();\r\n }\r\n const hiddenElement = document.createElement(\"a\");\r\n hiddenElement.href = \"data:octet/stream;charset=utf-8,\" + encodeURI(maps);\r\n hiddenElement.target = \"_blank\";\r\n hiddenElement.download = this.name + \".tilemaps\";\r\n hiddenElement.click();\r\n hiddenElement.remove();\r\n }\r\n\r\n /**\r\n * Imports the .tilemaps file\r\n * @param url of the .tilemaps file\r\n */\r\n public loadTileMaps(url: string): void {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"GET\", url);\r\n\r\n const _lc = this.options!.layerCount || 0;\r\n\r\n xhr.onload = () => {\r\n const data = xhr.response.split(\"\\n\\r\");\r\n for (let i = 0; i < _lc; i++) {\r\n const d = data[i].split(\",\").map(Number);\r\n const t = this._createTileBuffer(d);\r\n this._tileMaps[i].dispose();\r\n this._tileMaps[i] = t;\r\n }\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n };\r\n xhr.send();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n this._output.dispose();\r\n this._material.dispose();\r\n this._animationMap.dispose();\r\n this._tileMaps.forEach((tm) => {\r\n tm.dispose();\r\n });\r\n this._frameMap.dispose();\r\n }\r\n}\r\n"]}
|