1 |
- {"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer.js\";\nimport { DrawWrapper } from \"../Materials/drawWrapper.js\";\nimport { Logger } from \"../Misc/logger.js\";\nimport { BindLogDepth } from \"../Materials/materialHelper.functions.js\";\n/**\n * Class used to render sprites.\n *\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\n */\nexport class SpriteRenderer {\n /**\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\n */\n get fogEnabled() {\n return this._fogEnabled;\n }\n set fogEnabled(value) {\n if (this._fogEnabled === value) {\n return;\n }\n this._fogEnabled = value;\n this._createEffects();\n }\n /**\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\n * You can try switching to logarithmic depth.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\n */\n get useLogarithmicDepth() {\n return this._useLogarithmicDepth;\n }\n set useLogarithmicDepth(value) {\n var _this$_scene;\n const fragmentDepthSupported = !!((_this$_scene = this._scene) !== null && _this$_scene !== void 0 && _this$_scene.getEngine().getCaps().fragmentDepthSupported);\n if (value && !fragmentDepthSupported) {\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\n }\n this._useLogarithmicDepth = value && fragmentDepthSupported;\n this._createEffects();\n }\n /**\n * Gets the capacity of the manager\n */\n get capacity() {\n return this._capacity;\n }\n /**\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\n * Note that pixel perfect mode is not supported in WebGL 1\n */\n get pixelPerfect() {\n return this._pixelPerfect;\n }\n set pixelPerfect(value) {\n if (this._pixelPerfect === value) {\n return;\n }\n this._pixelPerfect = value;\n this._createEffects();\n }\n /**\n * Gets the shader language used in this renderer.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Creates a new sprite renderer\n * @param engine defines the engine the renderer works with\n * @param capacity defines the maximum allowed number of sprites\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\n * @param scene defines the hosting scene\n * @param rendererOptions options for the sprite renderer\n */\n constructor(engine, capacity, epsilon = 0.01, scene = null, rendererOptions) {\n var _rendererOptions$pixe;\n /**\n * Blend mode use to render the particle, it can be any of\n * the static undefined properties provided in this class.\n * Default value is 2\n */\n this.blendMode = 2;\n /**\n * Gets or sets a boolean indicating if alpha mode is automatically\n * reset.\n */\n this.autoResetAlpha = true;\n /**\n * Disables writing to the depth buffer when rendering the sprites.\n * It can be handy to disable depth writing when using textures without alpha channel\n * and setting some specific blend modes.\n */\n this.disableDepthWrite = false;\n this._fogEnabled = true;\n this._pixelPerfect = false;\n /** Shader language used by the material */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this._useVAO = false;\n this._useInstancing = false;\n this._vertexBuffers = {};\n this._isDisposed = false;\n this._shadersLoaded = false;\n this._pixelPerfect = (_rendererOptions$pixe = rendererOptions === null || rendererOptions === void 0 ? void 0 : rendererOptions.pixelPerfect) !== null && _rendererOptions$pixe !== void 0 ? _rendererOptions$pixe : false;\n this._capacity = capacity;\n this._epsilon = epsilon;\n this._engine = engine;\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\n this._scene = scene;\n if (!this._useInstancing) {\n this._buildIndexBuffer();\n }\n // VBO\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\n // 16 when using instances\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\n let offset = 6;\n let offsets;\n if (this._useInstancing) {\n const spriteData = new Float32Array([this._epsilon, this._epsilon, 1 - this._epsilon, this._epsilon, this._epsilon, 1 - this._epsilon, 1 - this._epsilon, 1 - this._epsilon]);\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\n } else {\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\n offset += 2;\n }\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\n this._vertexBuffers[\"options\"] = options;\n this._vertexBuffers[\"offsets\"] = offsets;\n this._vertexBuffers[\"inverts\"] = inverts;\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\n this._initShaderSourceAsync();\n }\n _initShaderSourceAsync() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const engine = _this._engine;\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\n _this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n yield Promise.all([import(\"../ShadersWGSL/sprites.vertex.js\"), import(\"../ShadersWGSL/sprites.fragment.js\")]);\n } else {\n yield Promise.all([import(\"../Shaders/sprites.vertex.js\"), import(\"../Shaders/sprites.fragment.js\")]);\n }\n _this._shadersLoaded = true;\n _this._createEffects();\n })();\n }\n _createEffects() {\n var _this$_drawWrapperBas, _this$_drawWrapperDep;\n if (this._isDisposed || !this._shadersLoaded) {\n return;\n }\n (_this$_drawWrapperBas = this._drawWrapperBase) === null || _this$_drawWrapperBas === void 0 || _this$_drawWrapperBas.dispose();\n (_this$_drawWrapperDep = this._drawWrapperDepth) === null || _this$_drawWrapperDep === void 0 || _this$_drawWrapperDep.dispose();\n this._drawWrapperBase = new DrawWrapper(this._engine);\n this._drawWrapperDepth = new DrawWrapper(this._engine, false);\n if (this._drawWrapperBase.drawContext) {\n this._drawWrapperBase.drawContext.useInstancing = this._useInstancing;\n }\n if (this._drawWrapperDepth.drawContext) {\n this._drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\n }\n let defines = \"\";\n if (this._pixelPerfect) {\n defines += \"#define PIXEL_PERFECT\\n\";\n }\n if (this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled) {\n defines += \"#define FOG\\n\";\n }\n if (this._useLogarithmicDepth) {\n defines += \"#define LOGARITHMICDEPTH\\n\";\n }\n this._drawWrapperBase.effect = this._engine.createEffect(\"sprites\", [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind], [\"view\", \"projection\", \"textureInfos\", \"alphaTest\", \"vFogInfos\", \"vFogColor\", \"logarithmicDepthConstant\"], [\"diffuseSampler\"], defines, undefined, undefined, undefined, undefined, this._shaderLanguage);\n this._drawWrapperDepth.effect = this._drawWrapperBase.effect;\n this._drawWrapperDepth.materialContext = this._drawWrapperBase.materialContext;\n }\n /**\n * Render all child sprites\n * @param sprites defines the list of sprites to render\n * @param deltaTime defines the time since last frame\n * @param viewMatrix defines the viewMatrix to use to render the sprites\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\n */\n render(sprites, deltaTime, viewMatrix, projectionMatrix, customSpriteUpdate = null) {\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\n return;\n }\n const drawWrapper = this._drawWrapperBase;\n const drawWrapperDepth = this._drawWrapperDepth;\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\n const effect = drawWrapper.effect;\n // Check\n if (!effect.isReady()) {\n return;\n }\n const engine = this._engine;\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\n // Sprites\n const max = Math.min(this._capacity, sprites.length);\n let offset = 0;\n let noSprite = true;\n for (let index = 0; index < max; index++) {\n const sprite = sprites[index];\n if (!sprite || !sprite.isVisible) {\n continue;\n }\n noSprite = false;\n sprite._animate(deltaTime);\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\n if (!this._useInstancing) {\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\n }\n }\n if (noSprite) {\n return;\n }\n this._buffer.update(this._vertexData);\n const culling = !!engine.depthCullingState.cull;\n const zOffset = engine.depthCullingState.zOffset;\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\n // Render\n engine.enableEffect(drawWrapper);\n effect.setTexture(\"diffuseSampler\", this.texture);\n effect.setMatrix(\"view\", viewMatrix);\n effect.setMatrix(\"projection\", projectionMatrix);\n // Scene Info\n if (shouldRenderFog) {\n const scene = this._scene;\n // Fog\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\n effect.setColor3(\"vFogColor\", scene.fogColor);\n }\n // Log. depth\n if (this.useLogarithmicDepth && this._scene) {\n BindLogDepth(drawWrapper.defines, effect, this._scene);\n }\n if (this._useVAO) {\n if (!this._vertexArrayObject) {\n this._vertexArrayObject = engine.recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\n }\n engine.bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\n } else {\n // VBOs\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\n }\n // Draw order\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? 518 : 515;\n if (!this.disableDepthWrite) {\n effect.setBool(\"alphaTest\", true);\n engine.setColorWrite(false);\n engine.enableEffect(drawWrapperDepth);\n if (this._useInstancing) {\n engine.drawArraysType(7, 0, 4, offset);\n } else {\n engine.drawElementsType(0, 0, offset / 4 * 6);\n }\n engine.enableEffect(drawWrapper);\n engine.setColorWrite(true);\n effect.setBool(\"alphaTest\", false);\n }\n engine.setAlphaMode(this.blendMode);\n if (this._useInstancing) {\n engine.drawArraysType(7, 0, 4, offset);\n } else {\n engine.drawElementsType(0, 0, offset / 4 * 6);\n }\n if (this.autoResetAlpha) {\n engine.setAlphaMode(0);\n }\n // Restore Right Handed\n if (useRightHandedSystem) {\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\n }\n engine.unbindInstanceAttributes();\n }\n _appendSpriteVertex(index, sprite, offsetX, offsetY, baseSize, useRightHandedSystem, customSpriteUpdate) {\n let arrayOffset = index * this._vertexBufferSize;\n if (offsetX === 0) {\n offsetX = this._epsilon;\n } else if (offsetX === 1) {\n offsetX = 1 - this._epsilon;\n }\n if (offsetY === 0) {\n offsetY = this._epsilon;\n } else if (offsetY === 1) {\n offsetY = 1 - this._epsilon;\n }\n if (customSpriteUpdate) {\n customSpriteUpdate(sprite, baseSize);\n } else {\n if (!sprite.cellIndex) {\n sprite.cellIndex = 0;\n }\n const rowSize = baseSize.width / this.cellWidth;\n const offset = sprite.cellIndex / rowSize >> 0;\n sprite._xOffset = (sprite.cellIndex - offset * rowSize) * this.cellWidth / baseSize.width;\n sprite._yOffset = offset * this.cellHeight / baseSize.height;\n sprite._xSize = this.cellWidth;\n sprite._ySize = this.cellHeight;\n }\n // Positions\n this._vertexData[arrayOffset] = sprite.position.x;\n this._vertexData[arrayOffset + 1] = sprite.position.y;\n this._vertexData[arrayOffset + 2] = sprite.position.z;\n this._vertexData[arrayOffset + 3] = sprite.angle;\n // Options\n this._vertexData[arrayOffset + 4] = sprite.width;\n this._vertexData[arrayOffset + 5] = sprite.height;\n if (!this._useInstancing) {\n this._vertexData[arrayOffset + 6] = offsetX;\n this._vertexData[arrayOffset + 7] = offsetY;\n } else {\n arrayOffset -= 2;\n }\n // Inverts according to Right Handed\n if (useRightHandedSystem) {\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\n } else {\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\n }\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\n // Color\n this._vertexData[arrayOffset + 14] = sprite.color.r;\n this._vertexData[arrayOffset + 15] = sprite.color.g;\n this._vertexData[arrayOffset + 16] = sprite.color.b;\n this._vertexData[arrayOffset + 17] = sprite.color.a;\n }\n _buildIndexBuffer() {\n const indices = [];\n let index = 0;\n for (let count = 0; count < this._capacity; count++) {\n indices.push(index);\n indices.push(index + 1);\n indices.push(index + 2);\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 3);\n index += 4;\n }\n this._indexBuffer = this._engine.createIndexBuffer(indices);\n }\n /**\n * Rebuilds the renderer (after a context lost, for eg)\n */\n rebuild() {\n var _this$_spriteBuffer;\n if (this._indexBuffer) {\n this._buildIndexBuffer();\n }\n if (this._useVAO) {\n this._vertexArrayObject = undefined;\n }\n this._buffer._rebuild();\n for (const key in this._vertexBuffers) {\n const vertexBuffer = this._vertexBuffers[key];\n vertexBuffer._rebuild();\n }\n (_this$_spriteBuffer = this._spriteBuffer) === null || _this$_spriteBuffer === void 0 || _this$_spriteBuffer._rebuild();\n }\n /**\n * Release associated resources\n */\n dispose() {\n var _this$_drawWrapperBas2, _this$_drawWrapperDep2;\n if (this._buffer) {\n this._buffer.dispose();\n this._buffer = null;\n }\n if (this._spriteBuffer) {\n this._spriteBuffer.dispose();\n this._spriteBuffer = null;\n }\n if (this._indexBuffer) {\n this._engine._releaseBuffer(this._indexBuffer);\n this._indexBuffer = null;\n }\n if (this._vertexArrayObject) {\n this._engine.releaseVertexArrayObject(this._vertexArrayObject);\n this._vertexArrayObject = null;\n }\n if (this.texture) {\n this.texture.dispose();\n this.texture = null;\n }\n (_this$_drawWrapperBas2 = this._drawWrapperBase) === null || _this$_drawWrapperBas2 === void 0 || _this$_drawWrapperBas2.dispose();\n (_this$_drawWrapperDep2 = this._drawWrapperDepth) === null || _this$_drawWrapperDep2 === void 0 || _this$_drawWrapperDep2.dispose();\n this._isDisposed = true;\n }\n}\n/**\n * Force all the sprites to compile to glsl even on WebGPU engines.\n * False by default. This is mostly meant for backward compatibility.\n */\nSpriteRenderer.ForceGLSL = false;","map":{"version":3,"names":["Buffer","VertexBuffer","DrawWrapper","Logger","BindLogDepth","SpriteRenderer","fogEnabled","_fogEnabled","value","_createEffects","useLogarithmicDepth","_useLogarithmicDepth","_this$_scene","fragmentDepthSupported","_scene","getEngine","getCaps","Warn","capacity","_capacity","pixelPerfect","_pixelPerfect","shaderLanguage","_shaderLanguage","constructor","engine","epsilon","scene","rendererOptions","_rendererOptions$pixe","blendMode","autoResetAlpha","disableDepthWrite","_useVAO","_useInstancing","_vertexBuffers","_isDisposed","_shadersLoaded","_epsilon","_engine","instancedArrays","_features","supportSpriteInstancing","vertexArrayObject","disableVertexArrayObjects","_buildIndexBuffer","_vertexBufferSize","_vertexData","Float32Array","_buffer","positions","createVertexBuffer","PositionKind","options","offset","offsets","spriteData","_spriteBuffer","inverts","cellInfo","colors","ColorKind","_initShaderSourceAsync","_this","_asyncToGenerator","isWebGPU","ForceGLSL","Promise","all","_this$_drawWrapperBas","_this$_drawWrapperDep","_drawWrapperBase","dispose","_drawWrapperDepth","drawContext","useInstancing","defines","fogMode","effect","createEffect","undefined","materialContext","render","sprites","deltaTime","viewMatrix","projectionMatrix","customSpriteUpdate","texture","isReady","length","drawWrapper","drawWrapperDepth","shouldRenderFog","useRightHandedSystem","max","Math","min","noSprite","index","sprite","isVisible","_animate","baseSize","getBaseSize","_appendSpriteVertex","update","culling","depthCullingState","cull","zOffset","zOffsetUnits","setState","enableEffect","setTexture","setMatrix","setFloat4","fogStart","fogEnd","fogDensity","setColor3","fogColor","_vertexArrayObject","recordVertexArrayObject","_indexBuffer","bindVertexArrayObject","bindBuffers","depthFunc","useReverseDepthBuffer","setBool","setColorWrite","drawArraysType","drawElementsType","setAlphaMode","unbindInstanceAttributes","offsetX","offsetY","arrayOffset","cellIndex","rowSize","width","cellWidth","_xOffset","_yOffset","cellHeight","height","_xSize","_ySize","position","x","y","z","angle","invertU","invertV","color","r","g","b","a","indices","count","push","createIndexBuffer","rebuild","_this$_spriteBuffer","_rebuild","key","vertexBuffer","_this$_drawWrapperBas2","_this$_drawWrapperDep2","_releaseBuffer","releaseVertexArrayObject"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Sprites/spriteRenderer.js"],"sourcesContent":["\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer.js\";\nimport { DrawWrapper } from \"../Materials/drawWrapper.js\";\nimport { Logger } from \"../Misc/logger.js\";\nimport { BindLogDepth } from \"../Materials/materialHelper.functions.js\";\n/**\n * Class used to render sprites.\n *\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\n */\nexport class SpriteRenderer {\n /**\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\n */\n get fogEnabled() {\n return this._fogEnabled;\n }\n set fogEnabled(value) {\n if (this._fogEnabled === value) {\n return;\n }\n this._fogEnabled = value;\n this._createEffects();\n }\n /**\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\n * You can try switching to logarithmic depth.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\n */\n get useLogarithmicDepth() {\n return this._useLogarithmicDepth;\n }\n set useLogarithmicDepth(value) {\n const fragmentDepthSupported = !!this._scene?.getEngine().getCaps().fragmentDepthSupported;\n if (value && !fragmentDepthSupported) {\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\n }\n this._useLogarithmicDepth = value && fragmentDepthSupported;\n this._createEffects();\n }\n /**\n * Gets the capacity of the manager\n */\n get capacity() {\n return this._capacity;\n }\n /**\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\n * Note that pixel perfect mode is not supported in WebGL 1\n */\n get pixelPerfect() {\n return this._pixelPerfect;\n }\n set pixelPerfect(value) {\n if (this._pixelPerfect === value) {\n return;\n }\n this._pixelPerfect = value;\n this._createEffects();\n }\n /**\n * Gets the shader language used in this renderer.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Creates a new sprite renderer\n * @param engine defines the engine the renderer works with\n * @param capacity defines the maximum allowed number of sprites\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\n * @param scene defines the hosting scene\n * @param rendererOptions options for the sprite renderer\n */\n constructor(engine, capacity, epsilon = 0.01, scene = null, rendererOptions) {\n /**\n * Blend mode use to render the particle, it can be any of\n * the static undefined properties provided in this class.\n * Default value is 2\n */\n this.blendMode = 2;\n /**\n * Gets or sets a boolean indicating if alpha mode is automatically\n * reset.\n */\n this.autoResetAlpha = true;\n /**\n * Disables writing to the depth buffer when rendering the sprites.\n * It can be handy to disable depth writing when using textures without alpha channel\n * and setting some specific blend modes.\n */\n this.disableDepthWrite = false;\n this._fogEnabled = true;\n this._pixelPerfect = false;\n /** Shader language used by the material */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this._useVAO = false;\n this._useInstancing = false;\n this._vertexBuffers = {};\n this._isDisposed = false;\n this._shadersLoaded = false;\n this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;\n this._capacity = capacity;\n this._epsilon = epsilon;\n this._engine = engine;\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\n this._scene = scene;\n if (!this._useInstancing) {\n this._buildIndexBuffer();\n }\n // VBO\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\n // 16 when using instances\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\n let offset = 6;\n let offsets;\n if (this._useInstancing) {\n const spriteData = new Float32Array([\n this._epsilon,\n this._epsilon,\n 1 - this._epsilon,\n this._epsilon,\n this._epsilon,\n 1 - this._epsilon,\n 1 - this._epsilon,\n 1 - this._epsilon,\n ]);\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\n }\n else {\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\n offset += 2;\n }\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\n this._vertexBuffers[\"options\"] = options;\n this._vertexBuffers[\"offsets\"] = offsets;\n this._vertexBuffers[\"inverts\"] = inverts;\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\n this._initShaderSourceAsync();\n }\n async _initShaderSourceAsync() {\n const engine = this._engine;\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n await Promise.all([import(\"../ShadersWGSL/sprites.vertex.js\"), import(\"../ShadersWGSL/sprites.fragment.js\")]);\n }\n else {\n await Promise.all([import(\"../Shaders/sprites.vertex.js\"), import(\"../Shaders/sprites.fragment.js\")]);\n }\n this._shadersLoaded = true;\n this._createEffects();\n }\n _createEffects() {\n if (this._isDisposed || !this._shadersLoaded) {\n return;\n }\n this._drawWrapperBase?.dispose();\n this._drawWrapperDepth?.dispose();\n this._drawWrapperBase = new DrawWrapper(this._engine);\n this._drawWrapperDepth = new DrawWrapper(this._engine, false);\n if (this._drawWrapperBase.drawContext) {\n this._drawWrapperBase.drawContext.useInstancing = this._useInstancing;\n }\n if (this._drawWrapperDepth.drawContext) {\n this._drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\n }\n let defines = \"\";\n if (this._pixelPerfect) {\n defines += \"#define PIXEL_PERFECT\\n\";\n }\n if (this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled) {\n defines += \"#define FOG\\n\";\n }\n if (this._useLogarithmicDepth) {\n defines += \"#define LOGARITHMICDEPTH\\n\";\n }\n this._drawWrapperBase.effect = this._engine.createEffect(\"sprites\", [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind], [\"view\", \"projection\", \"textureInfos\", \"alphaTest\", \"vFogInfos\", \"vFogColor\", \"logarithmicDepthConstant\"], [\"diffuseSampler\"], defines, undefined, undefined, undefined, undefined, this._shaderLanguage);\n this._drawWrapperDepth.effect = this._drawWrapperBase.effect;\n this._drawWrapperDepth.materialContext = this._drawWrapperBase.materialContext;\n }\n /**\n * Render all child sprites\n * @param sprites defines the list of sprites to render\n * @param deltaTime defines the time since last frame\n * @param viewMatrix defines the viewMatrix to use to render the sprites\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\n */\n render(sprites, deltaTime, viewMatrix, projectionMatrix, customSpriteUpdate = null) {\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\n return;\n }\n const drawWrapper = this._drawWrapperBase;\n const drawWrapperDepth = this._drawWrapperDepth;\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\n const effect = drawWrapper.effect;\n // Check\n if (!effect.isReady()) {\n return;\n }\n const engine = this._engine;\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\n // Sprites\n const max = Math.min(this._capacity, sprites.length);\n let offset = 0;\n let noSprite = true;\n for (let index = 0; index < max; index++) {\n const sprite = sprites[index];\n if (!sprite || !sprite.isVisible) {\n continue;\n }\n noSprite = false;\n sprite._animate(deltaTime);\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\n if (!this._useInstancing) {\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\n }\n }\n if (noSprite) {\n return;\n }\n this._buffer.update(this._vertexData);\n const culling = !!engine.depthCullingState.cull;\n const zOffset = engine.depthCullingState.zOffset;\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\n // Render\n engine.enableEffect(drawWrapper);\n effect.setTexture(\"diffuseSampler\", this.texture);\n effect.setMatrix(\"view\", viewMatrix);\n effect.setMatrix(\"projection\", projectionMatrix);\n // Scene Info\n if (shouldRenderFog) {\n const scene = this._scene;\n // Fog\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\n effect.setColor3(\"vFogColor\", scene.fogColor);\n }\n // Log. depth\n if (this.useLogarithmicDepth && this._scene) {\n BindLogDepth(drawWrapper.defines, effect, this._scene);\n }\n if (this._useVAO) {\n if (!this._vertexArrayObject) {\n this._vertexArrayObject = engine.recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\n }\n engine.bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\n }\n else {\n // VBOs\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\n }\n // Draw order\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? 518 : 515;\n if (!this.disableDepthWrite) {\n effect.setBool(\"alphaTest\", true);\n engine.setColorWrite(false);\n engine.enableEffect(drawWrapperDepth);\n if (this._useInstancing) {\n engine.drawArraysType(7, 0, 4, offset);\n }\n else {\n engine.drawElementsType(0, 0, (offset / 4) * 6);\n }\n engine.enableEffect(drawWrapper);\n engine.setColorWrite(true);\n effect.setBool(\"alphaTest\", false);\n }\n engine.setAlphaMode(this.blendMode);\n if (this._useInstancing) {\n engine.drawArraysType(7, 0, 4, offset);\n }\n else {\n engine.drawElementsType(0, 0, (offset / 4) * 6);\n }\n if (this.autoResetAlpha) {\n engine.setAlphaMode(0);\n }\n // Restore Right Handed\n if (useRightHandedSystem) {\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\n }\n engine.unbindInstanceAttributes();\n }\n _appendSpriteVertex(index, sprite, offsetX, offsetY, baseSize, useRightHandedSystem, customSpriteUpdate) {\n let arrayOffset = index * this._vertexBufferSize;\n if (offsetX === 0) {\n offsetX = this._epsilon;\n }\n else if (offsetX === 1) {\n offsetX = 1 - this._epsilon;\n }\n if (offsetY === 0) {\n offsetY = this._epsilon;\n }\n else if (offsetY === 1) {\n offsetY = 1 - this._epsilon;\n }\n if (customSpriteUpdate) {\n customSpriteUpdate(sprite, baseSize);\n }\n else {\n if (!sprite.cellIndex) {\n sprite.cellIndex = 0;\n }\n const rowSize = baseSize.width / this.cellWidth;\n const offset = (sprite.cellIndex / rowSize) >> 0;\n sprite._xOffset = ((sprite.cellIndex - offset * rowSize) * this.cellWidth) / baseSize.width;\n sprite._yOffset = (offset * this.cellHeight) / baseSize.height;\n sprite._xSize = this.cellWidth;\n sprite._ySize = this.cellHeight;\n }\n // Positions\n this._vertexData[arrayOffset] = sprite.position.x;\n this._vertexData[arrayOffset + 1] = sprite.position.y;\n this._vertexData[arrayOffset + 2] = sprite.position.z;\n this._vertexData[arrayOffset + 3] = sprite.angle;\n // Options\n this._vertexData[arrayOffset + 4] = sprite.width;\n this._vertexData[arrayOffset + 5] = sprite.height;\n if (!this._useInstancing) {\n this._vertexData[arrayOffset + 6] = offsetX;\n this._vertexData[arrayOffset + 7] = offsetY;\n }\n else {\n arrayOffset -= 2;\n }\n // Inverts according to Right Handed\n if (useRightHandedSystem) {\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\n }\n else {\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\n }\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\n // Color\n this._vertexData[arrayOffset + 14] = sprite.color.r;\n this._vertexData[arrayOffset + 15] = sprite.color.g;\n this._vertexData[arrayOffset + 16] = sprite.color.b;\n this._vertexData[arrayOffset + 17] = sprite.color.a;\n }\n _buildIndexBuffer() {\n const indices = [];\n let index = 0;\n for (let count = 0; count < this._capacity; count++) {\n indices.push(index);\n indices.push(index + 1);\n indices.push(index + 2);\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 3);\n index += 4;\n }\n this._indexBuffer = this._engine.createIndexBuffer(indices);\n }\n /**\n * Rebuilds the renderer (after a context lost, for eg)\n */\n rebuild() {\n if (this._indexBuffer) {\n this._buildIndexBuffer();\n }\n if (this._useVAO) {\n this._vertexArrayObject = undefined;\n }\n this._buffer._rebuild();\n for (const key in this._vertexBuffers) {\n const vertexBuffer = this._vertexBuffers[key];\n vertexBuffer._rebuild();\n }\n this._spriteBuffer?._rebuild();\n }\n /**\n * Release associated resources\n */\n dispose() {\n if (this._buffer) {\n this._buffer.dispose();\n this._buffer = null;\n }\n if (this._spriteBuffer) {\n this._spriteBuffer.dispose();\n this._spriteBuffer = null;\n }\n if (this._indexBuffer) {\n this._engine._releaseBuffer(this._indexBuffer);\n this._indexBuffer = null;\n }\n if (this._vertexArrayObject) {\n this._engine.releaseVertexArrayObject(this._vertexArrayObject);\n this._vertexArrayObject = null;\n }\n if (this.texture) {\n this.texture.dispose();\n this.texture = null;\n }\n this._drawWrapperBase?.dispose();\n this._drawWrapperDepth?.dispose();\n this._isDisposed = true;\n }\n}\n/**\n * Force all the sprites to compile to glsl even on WebGPU engines.\n * False by default. This is mostly meant for backward compatibility.\n */\nSpriteRenderer.ForceGLSL = false;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|